响应式全屏无缝滚动式幻灯片
作者:秋了秋 发表时间:2015年11月13日
之前有写过淡入淡出的幻灯片《详解jq幻灯片原理及制作方法》,现在写一个左右滚动式幻灯片,虽然web幻灯片功能的代码在网上一抓一大把,但网上很多的都是通过插件封装而来,动不动就几千行代码,一两百kb大小,占用资源不说,对于修改来说也异常困难和麻烦。所以这东西还得自己掌握比较好,自己爱怎么写就怎么写,我让它怎么滚动就怎么滚动,我让它向东它绝不会向西。
如果自己一字一句写出来的话,你会发现幻灯片代码并不用太多,无非就是有这么几个功能:
1.有个定时器让它不断的改变margin或left值;
2.有个轮播焦点,图片移动到第n张,第n个焦点就点亮,点击第n个焦点,滚动到第n张图片;
3.有个左右箭头,点击左它就向左滚动一张,点击右它就向右滚动一张;
4.鼠标移入移出效果,鼠标移上去,幻灯片暂停,鼠标移出,幻灯片继续轮播;
有了这几个思路,我们就开始动手写了,首先是html布局:
<div class="container"> <!--图片容器--> <ul id="slide"> <li><img src='20151010ivfthh.jpg' alt=''/></li> <li><img src='20151010dlezyn.jpg' alt=''/></li> <li><img src='20151010riudvj.jpg' alt=''/></li> </ul> <!--焦点--> <ul id="qiuye_index"></ul> </div> <!--左右按钮--> <div id="prenext"><span class="nex">下一个</span><span class="pre">上一个</span></div>
css样式见参考:
*{ margin: 0; padding: 0; list-style:none;} .container { width: 100%; overflow: hidden; position: relative; } #slide { position: absolute; left: 0; top: 0; overflow: hidden; } #slide li { float: left; overflow: hidden; max-width: 100%; } #slide li{ min-height:200px; } #slide li img { width: 100%; display: block } #qiuye_index { position: absolute; bottom: 8px; left: 50%; margin-left: -45px; } #qiuye_index li { width: 20px; height: 20px; float: left; background: #ccc; margin: 5px; } #qiuye_index li.on { background:#6824B3; } #prenext { margin: 0 auto; position: relative; } #prenext .pre,#prenext .nex { display: block; background: black; position:absolute; height: 50px; line-height: 50px; color: #fff; width:80px; text-align: center; } #prenext .pre {left: 50px; } #prenext .nex {right: 50px;} #qiuye_index li, #prenext .pre, #prenext .nex { cursor: pointer; }
幻灯片jq核心代码:
$(function(){ var $container = $('.container'); var $slide = $('#slide'); var slideTime = 4000; $('li img', $slide) .eq(0) .on('load', function () { var html=$('#slide').html(), liw; $slide.append(html); var length = $('>li', $slide).length; for(var i=0;i<length/2;i++){ $('<li></li>').appendTo($('#qiuye_index')); } //响应式设计(设置样式) function qiuye_resize() { liw = document.body.clientWidth || document.documentElement.clientWidth; $('>li', $slide).width(liw); $slide.width(liw * length); var h=$('>li', $slide).height(); $container.height(h); $('#prenext').css('margin-top',(-h/2-$('#prenext .nex').height()/2)+'px') } //初始化var i = 0; qiuye_resize(); window.onresize = function() { qiuye_resize();qiuye_bo(); } //轮播主函数 function qiuye_bo() { if (i >= length) { $slide.css('left',(-liw*length/2+liw)+'px'); i = length/2; } else if(i < 0){ $slide.css('left',(-liw*length/2)+'px'); i=length/2-1; } $slide.stop().animate({'left': -liw * i}); $('#qiuye_index li').eq(i<length/2?i:i-length/2).addClass('on').siblings().removeClass('on'); i++; } qiuye_bo(); var qiuye_indexnterval = setInterval(qiuye_bo, slideTime);//设置定时器开始轮播//焦点点击事件 $('#qiuye_index li').click(function() { clearInterval(qiuye_indexnterval); i = $(this).index(); qiuye_bo(); qiuye_indexnterval = setInterval(qiuye_bo, slideTime); }); //下一张按钮事件 $('#prenext .nex').click(function() { clearInterval(qiuye_indexnterval); qiuye_bo(); qiuye_indexnterval = setInterval(qiuye_bo, slideTime); }); //上一张按钮事件 $('#prenext .pre').click(function() { clearInterval(qiuye_indexnterval); i -= 2; qiuye_bo();qiuye_indexnterval = setInterval(qiuye_bo, slideTime); }); //鼠标移入移出事件 $slide.mouseover(function() { clearInterval(qiuye_indexnterval); }); $slide.mouseout(function() { qiuye_indexnterval = setInterval(qiuye_bo, slideTime); }); }); });
特别特点:
1.RT 2.响应式 3.宽屏 4.无缝 5.滚动式 其他功能 1.焦点点击 2.hover 3.前进后退点击按钮
效果如下:
3
文章作者: “秋了秋”个人博客,本站鼓励原创。
转载请注明本文地址:http://netblog.cn/blog/411.html