实现图片首尾平滑轮播(JS原生方法—节流)


Posted in Javascript onOctober 17, 2017

首先给出HTML代码,要注意轮播图片表(#list)末尾加上第一个图片1.jpg,在首部加上最后一个图片5.jpg。

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <title>首尾轮播</title>
 <link rel="stylesheet" href="首尾轮播.css" rel="external nofollow" >
<script src="首尾轮播.js"></script>
</head>
<body>
 <div id="container">
  <div id="list">
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/5.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/1.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/2.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/3.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/4.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/5.jpg" alt=""></a></div>
   <div><a href="#" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" rel="external nofollow" ><img src="../imgs/1.jpg" alt=""></a></div>
  </div>

  <div class="arrow" id="prev"><</div>
  <div class="arrow" id="next">></div>


 </div>  

</body> 

</html>

接下来给出css和js代码,大家可以酌情根据图片的大小、数量、宽度,调整container、list的参数,这也是封装JS所要考虑的参数。

*{
 margin: 0;
 padding: 0;
}

#container{
 height: 400px;
 width: 500px;
 margin: 0 auto;
 position: relative;
 overflow: hidden;
 border: 1px solid black;
}

#list>div {
 float: left;
}
#list{
 position: absolute; 
 height: 400px;
 width: 3600px;
 
}

#list img{
 height: 400px;
 width: 500px;
}
.arrow {
 user-select:none;
 position: absolute;
 top:150px;
 z-index: 2;
 background-color: #aaa;
 height: 100px;
 width: 80px;
 cursor: pointer;
 opacity: 0.5;
 display: none;
 line-height: 100px;
 text-align: center;
 color: #222;
 font-size: 3em;

}
#container:hover .arrow{
 display: block;
}
 #prev{
 left:20px;
}

 #next{
 right: 20px;
}

在JS中,我们可以通过改变speed变量来控制图片切换的速度....这里用的是 element.style.transition来控制的过渡效果.

window.onload=function(){
 var container = document.getElementById('container');
 var list = document.getElementById('list');//获取图片容器
 var prev = document.getElementById('prev');//向前按钮
 var next = document.getElementById('next');//向后按钮
 var nowP = 1; //显示位置
 var judge = null; //执行权
 var speed = 0.1; // 切换速度 秒
 prev.onclick=function(){
  if(!judge){
    judge = setTimeout(function(){
     if(nowP==1){setTimeout(function(){
      list.style.transition="left 0s";
     list.style.left = "-2500px"; 
     nowP = 5;},speed*1000);} //当到达图片表左边缘时与动画同步切换 
     list.style.transition = "left "+speed+"s";
    move(500);
    nowP--;
    judge = null;
   },speed*1000);
  }
 };
 next.onclick=function(){
  if(!judge){    
    judge = setTimeout(function(){
     if(nowP==5){setTimeout(function(){
      list.style.transition="left 0s";
     list.style.left = "-500px"; 
     nowP = 1;},speed*1000);} //当到达图片表右边缘时与动画同步切换 
    list.style.transition = "left "+speed+"s";
    move(-500);
    nowP++;
    judge = null;
   },speed*1000);
  }

 };

 function move(num){
  var term = parseInt(list.style.left) + num ; 
  list.style.left = term+"px";
 }

 var roll= setInterval(function(){
  next.onclick();
 },2000);

 container.onmouseenter=function(){
  clearInterval(roll);
 };

 container.onmouseleave=function()
  {
  roll=setInterval(function(){
  next.onclick();
  },2000);
 };

 
};

下面是一个演示demo,简单来说原理就是在切换到图片表首和表尾的动画开始时,设置一个延迟执行时间与动画过渡时间相同的setTimeout函数来执行瞬间切换,再通过节流来保证最大的切换速度(speed)。

本人也是初学前端,如果有帮助的话,点一下推荐吧

实现图片首尾平滑轮播(JS原生方法—节流)

以上这篇实现图片首尾平滑轮播(JS原生方法—节流)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript游戏之优化篇
Nov 08 Javascript
Jquery 在页面加载后执行的几种方式
Mar 14 Javascript
Jquery validation remote 验证的缓存问题解决方法
Mar 25 Javascript
js 获取范围内的随机数实例代码
Aug 02 Javascript
原生JS实现小小的音乐播放器
Oct 16 Javascript
原生JS控制多个滚动条同步跟随滚动效果
Dec 22 Javascript
详解vuex 渐进式教程实例代码
Nov 27 Javascript
vue favicon设置以及动态修改favicon的方法
Dec 21 Javascript
微信小程序实现多选删除列表数据功能示例
Jan 15 Javascript
在vue中axios设置timeout超时的操作
Sep 04 Javascript
解决antd日期选择组件,添加value就无法点击下一年和下一月问题
Oct 29 Javascript
JS实现超级好看的鼠标小尾巴特效
Dec 01 Javascript
打造通用的匀速运动框架(实例讲解)
Oct 17 #Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
Oct 17 #Javascript
Vue中封装input组件的实例详解
Oct 17 #Javascript
js获取文件里面的所有文件名(实例)
Oct 17 #Javascript
Vue中之nextTick函数源码分析详解
Oct 17 #Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
Oct 16 #Javascript
jquery一键控制checkbox全选、反选或全不选
Oct 16 #jQuery
You might like
将兴奋、喜悦和坎加斯带到戴安娜:亚马逊公主
2020/03/03 欧美动漫
一个很方便的 XML 类!!原创的噢
2006/10/09 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php实例分享之mysql数据备份
2014/05/19 PHP
php防止伪造的数据从URL提交方法
2014/06/27 PHP
PHP采用get获取url汉字出现乱码的解决方法
2014/11/13 PHP
PHP7 windows支持
2021/03/09 PHP
javascript 不间断的图片滚动并可点击
2010/01/15 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
提高jQuery性能优化的技巧
2015/08/03 Javascript
实例详解JavaScript获取链接参数的方法
2016/01/01 Javascript
JavaScript事件 &quot;事件对象&quot;的注意要点
2016/01/14 Javascript
微信支付 JS API支付接口详解
2016/07/11 Javascript
JS正则截取两个字符串之间及字符串前后内容的方法
2017/01/06 Javascript
解决Vue2.0自带浏览器里无法打开的原因(兼容处理)
2017/07/28 Javascript
通过nodejs 服务器读取HTML文件渲染到页面的方法
2018/05/17 NodeJs
python继承和抽象类的实现方法
2015/01/14 Python
深入浅析python中的多进程、多线程、协程
2016/06/22 Python
Python实现的微信公众号群发图片与文本消息功能实例详解
2017/06/30 Python
python中MethodType方法介绍与使用示例
2017/08/03 Python
python 获取当天凌晨零点的时间戳方法
2018/05/22 Python
python简单贪吃蛇开发
2019/01/28 Python
pyqt5 实现 下拉菜单 + 打开文件的示例代码
2019/06/20 Python
tensorflow 报错unitialized value的解决方法
2020/02/06 Python
解决Keras使用GPU资源耗尽的问题
2020/06/22 Python
如何完美的建立一个python项目
2020/10/09 Python
python中slice参数过长的处理方法及实例
2020/12/15 Python
Fairyseason:为个人和批发商提供女装和配件
2017/03/01 全球购物
汇集了世界上最好的天然和有机美容产品:LoveLula
2018/02/05 全球购物
仓管岗位职责范本
2014/02/08 职场文书
2014年食品安全工作总结
2014/12/04 职场文书
2014年校长工作总结
2014/12/11 职场文书
党员志愿者服务倡议书
2015/04/29 职场文书
导游词之塘栖古镇
2019/12/04 职场文书
浅谈JS和Nodejs中的事件驱动
2021/05/05 NodeJs