Jquery和纯JS实现轮播图(一)--左右切换式
2017-04-28 13:01
671 查看
给大家分享下常见 的左右切换式轮播图;
一、页面结构
对于左右切换式的轮播图的结构主要分为以下几个部分:
1、首先是个外围部分(其实也就是最外边的整体wrapper)
2、其次就是你设置图片轮播的地方(也就是一个container吧)
3、然后是一个图片组(可以用新的div 也可以直接使用 ul–>li形式)
4、然后是图片两端的左箭头和右箭头
7、然后是一个按钮层,用来定位图片组的index吧,一般放在图片的下方(div 或 ul–>li)
二、CSS样式
左右切换式则是采用图片li 浮动,父层元素ul 总宽为总图片宽,并设定为有限container宽度下隐藏超出宽度的部分;然后当想切换到某序号的图片时,则采用其ul 定位 left样式设定相应属性值实现
比如显示第一张图片初始定位left为0px, 要想显示第二张图片则需要left:-800px 处理;;
三、JS处理
(1)jquery处理:
jquery这样就能实现左右切换式轮播图了,简便,原生JS代码量就有些多了;
(2)原生JS处理:
注:getElementsByClassName()是我在另外一个js文件里封装的函数,可以参考我的另一篇博客: JS封装通过className获取元素的函数
以上就是关于Jquery和纯JS实现轮播图–左右切换式的内容了。
一、页面结构
对于左右切换式的轮播图的结构主要分为以下几个部分:
1、首先是个外围部分(其实也就是最外边的整体wrapper)
2、其次就是你设置图片轮播的地方(也就是一个container吧)
3、然后是一个图片组(可以用新的div 也可以直接使用 ul–>li形式)
4、然后是图片两端的左箭头和右箭头
7、然后是一个按钮层,用来定位图片组的index吧,一般放在图片的下方(div 或 ul–>li)
<div id="warpper"> <div class="container"> <!-- 图片区域 --> <ul class="imgList"> <li><img src="./images/img1.jpg" alt=""></li> <li><img src="./images/img2.jpg" alt=""></li> <li><img src="./images/img3.jpg" alt=""></li> <li><img src="./images/img4.jpg" alt=""></li> <li><img src="./images/img5.jpg" alt=""></li> <li><img src="./images/img6.jpg" alt=""></li> </ul> <!-- 左右切换图标 --> <img src="./images/pre.png" width="40px" height="60px" class="pre"> <img src="./images/next.png" width="40px" height="60px" class="next"> <!-- 下方控制图片按钮 --> <ul class="dollList"> <li class="sec"><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> <li><a href="#"></a></li> </ul> </div> </div>
二、CSS样式
左右切换式则是采用图片li 浮动,父层元素ul 总宽为总图片宽,并设定为有限container宽度下隐藏超出宽度的部分;然后当想切换到某序号的图片时,则采用其ul 定位 left样式设定相应属性值实现
比如显示第一张图片初始定位left为0px, 要想显示第二张图片则需要left:-800px 处理;;
<style> *{ margin: 0; padding: 0; } ul{ list-style: none; } a{ text-decoration: none; } #warpper{ width: 800px; height: 600px; margin: 20px auto;} .container{ width: 100%; height: 100%; overflow: hidden; position: relative; } .imgList{ width: 4800px; position: absolute; z-index: 5; } .imgList>li{ float: left; width: 800px; height: 600px; } .imgList>li>img{ width: 100%; height: 100%; } .pre,.next{ position: absolute; top: 275px; background: rgba(220,220,220,0.7); padding: 10px 0; z-index: 100; opacity: 0.6; filter: alpha(opacity=60); } .pre:hover,.next:hover{ cursor: pointer; opacity: 1; filter: alpha(opacity=100); } .pre{ left: 10px; } f28c .next{ right: 10px; } .dollList{ width:180px; position: absolute; z-index: 10; bottom: 20px; left: 310px ; } .dollList li{ float: left; margin-right: 10px; } .dollList li.sec a{ background: orange; } .dollList li a{ width: 15px; height: 15px; background: rgba(230,230,230,0.6); border-radius: 50%; display: inline-block; } </style>
三、JS处理
(1)jquery处理:
<script> $(function(){ //设置全局变量 var cur = 0; //当前的图片序号 imgLen = $(".imgList li").length; //获取图片的数量 timer = null; //设置定时定时器的名字,方便后面关闭 //当鼠标移到向左和向右的图标上关闭定时器,离开时则重置定时器 $(".pre,.next").hover(function(){ clearInterval( timer ); },function(){ changeImg( ); }); //当鼠标移到图片上关闭定时器,离开时则重置定时器 $(".imgList").hover(function(){ clearInterval( timer ); },function(){ changeImg( ); }); //点击向左图标根据cur进行上一个图片处理 $(".pre").click(function(){ cur = cur>0 ? (--cur) : (imgLen-1); changeTo( cur ); }); //点击向右图标根据cur进行上一个图片处理 $(".next").click(function(){ cur = cur<( imgLen-1 ) ? (++cur) : 0; changeTo( cur ); }); //为下方的圆点按钮绑定事件 $(".dollList li").hover(function(){ clearInterval(timer); var index = $(this).index(); cur = index changeTo(cur); },function(){ changeImg(); }); //封装图片自动播放函数 function changeImg(){ timer = setInterval(function(){ if( cur<imgLen-1 ){ cur++; }else{ cur=0; } changeTo( cur ); },2000); } //调用函数 changeImg(); //图片切换函数 function changeTo( num ){ var go = num*800; $(".imgList").animate({ "left" : -go },500); $(".dollList").find("li").removeClass("sec").eq(num).addClass("sec"); } }); </script>
jquery这样就能实现左右切换式轮播图了,简便,原生JS代码量就有些多了;
(2)原生JS处理:
<script> var cur = 0, //当前的图片序号 imgLis = getElementsByClassName("imgList")[0].getElementsByTagName("li"), //获取图片组 imgLen = imgLis.length, //获取图片的数量 timer = null; //设置定时定时器的名字,方便后面关闭 dollLis = getElementsByClassName("dollList")[0].getElementsByTagName("li"); //获取下方圆点 //封装图片自动播放函数 function changeImg(){ timer = setInterval(function(){ if(cur < imgLen -1){ cur ++; }else{ cur = 0; } //调用变换处理函数 changeTo(cur); },2500); } changeImg(); //调用添加事件处理 addEvent(); //给左右箭头和右下角的图片index添加事件处理 function addEvent(){ for(var i=0;i<imgLen;i++){ //闭包防止作用域内活动对象item的影响 (function(_i){ //鼠标滑过则清除定时器,并作变换处理 dollLis[_i].onmouseover = function(){ clearTimeout(timer); changeTo(_i); cur = _i; }; //鼠标滑出则重置定时器处理 dollLis[_i].onmouseout = function(){ changeImg(); }; })(i); } //给左箭头prev添加上一个事件 var pre = getElementsByClassName("pre")[0]; pre.onmouseover = function(){ //滑入清除定时器 clearIntervcural(timer); }; pre.onclick = function(){ //根据curIndex进行上一个图片处理 cur = (cur > 0) ? (--cur) : (imgLen - 1); changeTo(cur); }; pre.onmouseout = function(){ //滑出则重置定时器 changeImg(); }; //给右箭头next添加下一个事件 var next = getElementsByClassName("next")[0]; next.onmouseover = function(){ clearInterval(timercur); }; next.onclick = function(){ cur = (cur < imgLen - 1) ? (++cur) : 0; changeTo(cur); }; next.onmouseout = function(){ changeImg(); }; } //左右切换处理函数 function changeTo(num){ //设置image var imgList = getElementsByClassName("imgList")[0]; goLeft(imgList,num*800); //左移一定距离 //设置image的控制下标 index var _curIndex = getElementsByClassName("sec")[0]; removeClass(_curIndex,"sec"); addClass(dollLis[num],"sec"); } //图片组相对原始左移dist px距离 function goLeft(elem,dist){ if(dist == 800){ //第一次时设置left为0px 或者直接使用内嵌法 style="left:0;" elem.style.left = "0px"; } var toLeft; //判断图片移动方向是否为左 dist = dist + parseInt(elem.style.left); //图片组相对当前移动距离 if(dist<0){ toLeft = false; dist = Math.abs(dist); }else{ toLeft = true; } for(var i=0;i<= dist/20;i++){ //这里设定缓慢移动,10阶每阶80px (function(_i){ var pos = parseInt(elem.style.left); //获取当前left setTimeout(function(){ pos += (toLeft)? -(_i * 20) : (_i * 20); //根据toLeft值指定图片组位置改变 //console.log(pos); elem.style.left = pos + "px"; },_i * 25); //每阶间隔50毫秒 })(i); } } </script>
注:getElementsByClassName()是我在另外一个js文件里封装的函数,可以参考我的另一篇博客: JS封装通过className获取元素的函数
以上就是关于Jquery和纯JS实现轮播图–左右切换式的内容了。
相关文章推荐
- Jquery和纯JS实现轮播图(二)--淡入淡出切换式
- 图片轮播(左右切换)--JS原生和jQuery实现
- js实现点击左右按钮轮播图片效果实例
- jquery实现带左右箭头和数字焦点的图片轮播手写代码
- 原生js和jquery实现图片轮播特效
- js/jquery中实现图片轮播
- jQuery实现图片轮播效果代码(基于jquery.pack.js插件)
- 图片轮播(淡入淡出)--JS原生和jQuery实现
- JS实现左右无缝轮播图代码
- js与jquery分别实现手动轮播图
- 【实践】纯jquery实现图片滑动无缝轮播,带左右按钮及控制按钮
- 原生js和jquery实现图片轮播特效
- js实现图片点击左右轮播
- JS实现左右无缝轮播图代码
- jQuery实现简单的图片轮播(二)-增加左右(或上下)翻页功能
- 原生js和jquery实现图片轮播淡入淡出效果
- jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
- jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
- jquery.flexslider-min.js实现banner轮播图效果