页面中幻灯片的制作
以天天生鲜中index.html页面中的幻灯片为例,代码如下,需要结合index.html页面的代码多看看
原理:幻灯片的几张图都是以绝对定位的方式放在页面的一个位置,叠加在一起 $(function(){ var $slides = $(\'.slide_pics li\'); //定义有多少张图片,这里有4张 var len = $slides.length; var nowli = 0; //将要运动过来的li,就是你点击想看的图片li,序列号从0开始算起 var prevli = 0; //当前要离开的li var $prev = $(\'.prev\'); //给左边的箭头定义变量 var $next = $(\'.next\'); //右边的箭头定义变量 var ismove = false; var timer = null; //定义一个定时器的占位符 //每个li的宽度是760,这里把除了第一个图之外的所有图都放到右边 $slides.not(\':first\').css({left:760}); // $slides.each(function(index, el) { var $li = $(\'<li>\'); //创建li标签,就是下面的滚动点 if(index==0) //设定第一个li的样式是高亮的 { $li.addClass(\'active\'); } $li.appendTo($(\'.points\')); //实现把<li>滚动点附加到页面中 }); $points = $(\'.points li\'); //选中4个点 timer = setInterval(autoplay,4000);//定时器4秒放一次图片,实现幻灯片自动播放 //实现把鼠标放在幻灯片上时,停止播放,鼠标移开后继续播放 $(\'.slide\').mouseenter(function() { clearInterval(timer); //消除定时器 }); $(\'.slide\').mouseleave(function() { timer = setInterval(autoplay,4000); }); //幻灯片自动播放,其实就是和右箭头绑定事件一样 function autoplay(){ nowli++; move(); $points.eq(nowli).addClass(\'active\').siblings().removeClass(\'active\'); } //在滚动点上绑定事件,使点击滚动点的时候可跳到相应幻灯片 $points.click(function(event) { if(ismove) { return; } nowli = $(this).index(); //选取想要移动的图片的索引值 //消除重复点击选择图片li点时,出现的bug if(nowli==prevli) { return; } $(this).addClass(\'active\').siblings().removeClass(\'active\'); //选中的点颜色会变化 move(); //move函数来定义运动,在后面定义的有,就是function move() }); //左箭头绑定事件 $prev.click(function() { if(ismove) { return; } nowli--; move(); $points.eq(nowli).addClass(\'active\').siblings().removeClass(\'active\'); //箭头使图片移动的同时,下面的点也要相应移动 }); //右箭头绑定事件 $next.click(function() { if(ismove) { return; } nowli++; move(); $points.eq(nowli).addClass(\'active\').siblings().removeClass(\'active\'); }); //move函数处理所有的运动 //当快速点击箭头时,会出现一些图片显示的问题,解决方法:可以在所有的animate()前面加上stop() //例如:$slides.eq(nowli).stop().animate({left:0},800,\'easeOutExpo\') function move(){ ismove = true; if(nowli<0) //在第一张图片上还想左移的情况 { nowli=len-1; //让第4张图片从左边过来 prevli = 0 $slides.eq(nowli).css({left:-760}); //把第4张图片先放在左边 $slides.eq(nowli).animate({left:0},800,\'easeOutExpo\'); //然后放在原先图片1的位置 $slides.eq(prevli).animate({left:760},800,\'easeOutExpo\',function(){//原先图片1的位置右移 ismove = false; }); prevli=nowli; return; //不执行下面的条件判断语句 } //在第4张图片时,还想按右移箭头时 if(nowli>len-1) { nowli = 0; //出来的图片应该是第一张图 prevli = len-1; $slides.eq(nowli).css({left:760}); $slides.eq(nowli).animate({left:0},800,\'easeOutExpo\'); $slides.eq(prevli).animate({left:-760},800,\'easeOutExpo\',function(){ ismove = false; }); prevli=nowli; return; //return的作用是不执行下面的条件语句 } if(prevli<nowli) //看图片按从小到大顺序的时候,比如从第一个到第二个 { $slides.eq(nowli).css({left:760}); //先把大号的图放右边 $slides.eq(prevli).animate({left:-760},800,\'easeOutExpo\');//把小号图左边放 $slides.eq(nowli).animate({left:0},800,\'easeOutExpo\',function(){ //再把大号图放在原先小号图的位置 ismove = false; }); prevli=nowli; //nowli的值一直变的,这里把nowli值赋值给preli } //从大到小看图片 else { $slides.eq(nowli).css({left:-760}); $slides.eq(prevli).animate({left:760},800,\'easeOutExpo\'); $slides.eq(nowli).animate({left:0},800,\'easeOutExpo\',function(){ ismove = false; }); prevli=nowli; } } })
版权声明:本文为regit原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。