Forum Moderators: open

Message Too Old, No Replies

jQuery Slider, Delay the first slide before heading onto the 2nd

         

mattwiw

6:49 pm on Dec 30, 2009 (gmt 0)

10+ Year Member



Using Easy Slider 1.7, very beautiful jQuery slider.

I am wondering how I can pause the first slide so that it is displayed longer than every other slide. I am hoping there is an easy way to simply input a delay function that will simply delay when the timer starts on the first slide.


<head>
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript" src="js/easySlider1.7.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$("#slider").easySlider({
auto: true,
continuous: true
});
});
</script>
</head>


/*
* Easy Slider 1.7 - jQuery plugin
*written by Alen Grakalic
*source link removed
*
*Copyright (c) 2009 Alen Grakalic (credit link removed)
*Dual licensed under the MIT (MIT-LICENSE.txt)
*and GPL (GPL-LICENSE.txt) licenses.
*
*Built for jQuery library
*http://jquery.com
*
*/

/*
*markup example for $("#slider").easySlider();
*
* <div id="slider">
*<ul>
*<li><img src="images/01.jpg" alt="" /></li>
*<li><img src="images/02.jpg" alt="" /></li>
*<li><img src="images/03.jpg" alt="" /></li>
*<li><img src="images/04.jpg" alt="" /></li>
*<li><img src="images/05.jpg" alt="" /></li>
*</ul>
*</div>
*
*/

(function($) {

$.fn.easySlider = function(options){

// default configuration properties
var defaults = {
prevId: 'prevBtn',
prevText: 'Previous',
nextId: 'nextBtn',
nextText: 'Next',
controlsShow:true,
controlsBefore:'',
controlsAfter:'',
controlsFade:true,
firstId: 'firstBtn',
firstText: 'First',
firstShow:false,
lastId: 'lastBtn',
lastText: 'Last',
lastShow:false,
vertical:false,
speed: 800,
auto:false,
pause:99000,
continuous:false,
numeric: false,
numericId: 'controls'
};

var options = $.extend(defaults, options);

this.each(function() {
var obj = $(this);
var s = $("li", obj).length;
var w = $("li", obj).width();
var h = $("li", obj).height();
var clickable = true;
obj.width(w);
obj.height(h);
obj.css("overflow","hidden");
var ts = s-1;
var t = 0;
$("ul", obj).css('width',s*w);

if(options.continuous){
$("ul", obj).prepend($("ul li:last-child", obj).clone().css("margin-left","-"+ w +"px"));
$("ul", obj).append($("ul li:nth-child(2)", obj).clone());
$("ul", obj).css('width',(s+1)*w);
};

if(!options.vertical) $("li", obj).css('float','left');

if(options.controlsShow){
var html = options.controlsBefore;
if(options.numeric){
html += '<ol id="'+ options.numericId +'"></ol>';
} else {
if(options.firstShow) html += '<span id="'+ options.firstId +'"><a href=\"javascript:void(0);\">'+ options.firstText +'</a></span>';
html += ' <span id="'+ options.prevId +'"><a href=\"javascript:void(0);\">'+ options.prevText +'</a></span>';
html += ' <span id="'+ options.nextId +'"><a href=\"javascript:void(0);\">'+ options.nextText +'</a></span>';
if(options.lastShow) html += ' <span id="'+ options.lastId +'"><a href=\"javascript:void(0);\">'+ options.lastText +'</a></span>';
};

html += options.controlsAfter;
$(obj).after(html);
};

if(options.numeric){
for(var i=0;i<s;i++){
$(document.createElement("li"))
.attr('id',options.numericId + (i+1))
.html('<a rel='+ i +' href=\"javascript:void(0);\">'+ (i+1) +'</a>')
.appendTo($("#"+ options.numericId))
.click(function(){
animate($("a",$(this)).attr('rel'),true);
});
};
} else {
$("a","#"+options.nextId).click(function(){
animate("next",true);
});
$("a","#"+options.prevId).click(function(){
animate("prev",true);
});
$("a","#"+options.firstId).click(function(){
animate("first",true);
});
$("a","#"+options.lastId).click(function(){
animate("last",true);
});
};

function setCurrent(i){
i = parseInt(i)+1;
$("li", "#" + options.numericId).removeClass("current");
$("li#" + options.numericId + i).addClass("current");
};

function adjust(){
if(t>ts) t=0;
if(t<0) t=ts;
if(!options.vertical) {
$("ul",obj).css("margin-left",(t*w*-1));
} else {
$("ul",obj).css("margin-left",(t*h*-1));
}
clickable = true;
if(options.numeric) setCurrent(t);
};

function animate(dir,clicked){
if (clickable){
clickable = false;
var ot = t;
switch(dir){
case "next":
t = (ot>=ts) ? (options.continuous ? t+1 : ts) : t+1;
break;
case "prev":
t = (t<=0) ? (options.continuous ? t-1 : 0) : t-1;
break;
case "first":
t = 0;
break;
case "last":
t = ts;
break;
default:
t = dir;
break;
};
var diff = Math.abs(ot-t);
var speed = diff*options.speed;
if(!options.vertical) {
p = (t*w*-1);
$("ul",obj).animate(
{ marginLeft: p },
{ queue:false, duration:speed, complete:adjust }
);
} else {
p = (t*h*-1);
$("ul",obj).animate(
{ marginTop: p },
{ queue:false, duration:speed, complete:adjust }
);
};

if(!options.continuous && options.controlsFade){
if(t==ts){
$("a","#"+options.nextId).hide();
$("a","#"+options.lastId).hide();
} else {
$("a","#"+options.nextId).show();
$("a","#"+options.lastId).show();
};
if(t==0){
$("a","#"+options.prevId).hide();
$("a","#"+options.firstId).hide();
} else {
$("a","#"+options.prevId).show();
$("a","#"+options.firstId).show();
};
};

if(clicked) clearTimeout(timeout);
if(options.auto && dir=="next" && !clicked){;
timeout = setTimeout(function(){
animate("next",false);
},diff*options.speed+options.pause);
};

};

};
// init
var timeout;
if(options.auto){;
timeout = setTimeout(function(){
animate("next",false);
},options.pause);
};

if(options.numeric) setCurrent(0);

if(!options.continuous && options.controlsFade){
$("a","#"+options.prevId).hide();
$("a","#"+options.firstId).hide();
};

});

};

})(jQuery);

Thanks for any help.

Readie

2:36 am on Dec 31, 2009 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member



Right, I'm not sure if this will be allowed as it is a link, however it is a link to an authority, so perhaps it might.

this may be what you're looking for:
[sean.co.uk...]

scroll down to where it says "Setting a Javascript program to wait"

Fotiman

2:21 pm on Dec 31, 2009 (gmt 0)

WebmasterWorld Senior Member 10+ Year Member Top Contributors Of The Month



In the init code, it looks to see if options.auto is true. That's where it kicks off the first slide, and it uses the value of options.pause as the delay. You could simply change that to use a different value.

if(options.auto){
timeout = setTimeout(function(){
animate("next",false);
}, 180000);
}

In that example, I'm setting the initial slide to delay 180 seconds (180000 ms, 3 minutes). I think that will do what you're looking for.

mattwiw

12:31 am on Jan 15, 2010 (gmt 0)

10+ Year Member



Fotiman, you've done it again. Works great, thanks!