实现图片首尾平滑轮播(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 类与静态类的实现(续)
Apr 02 Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 Javascript
node.js中的fs.stat方法使用说明
Dec 16 Javascript
jQuery实现友好的轮播图片特效
Jan 12 Javascript
JS判断客服QQ号在线还是离线状态的方法
Jan 13 Javascript
Bootstrap模态对话框的简单使用
Apr 29 Javascript
详解javascript事件绑定使用方法
Oct 20 Javascript
Node.js编写CLI的实例详解
May 17 Javascript
Node接收电子邮件的实例代码
Jul 21 Javascript
浅谈vuepress 踩坑记
Apr 18 Javascript
react-router-dom 嵌套路由的实现
May 02 Javascript
vue-router的hooks用法详解
Jun 08 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
通过ICQ网关发送手机短信的PHP源程序
2006/10/09 PHP
PHP session_start()问题解疑(详细介绍)
2013/07/05 PHP
php中读写文件与读写数据库的效率比较分享
2013/10/19 PHP
php遍历目录方法小结
2015/03/10 PHP
thinkPHP批量删除的实现方法分析
2016/11/09 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
IE bug table元素的innerHTML
2010/01/11 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
基于jquery的大众点评,分类导航实现代码
2011/08/23 Javascript
js删除局部变量的实现方法
2016/06/25 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
工厂模式在JS中的实践
2017/01/18 Javascript
JS实现AES加密并与PHP互通的方法分析
2017/04/19 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
2018/11/05 Javascript
详解在vue-cli3.0中自定css、js和图片的打包路径
2019/08/26 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
vue中使用极验验证码的方法(附demo)
2019/12/04 Javascript
vue-以文件流-blob-的形式-下载-导出文件操作
2020/08/07 Javascript
[36:22]VP vs Serenity 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
用python实现的可以拷贝或剪切一个文件列表中的所有文件
2009/04/30 Python
用Python制作检测Linux运行信息的工具的教程
2015/04/01 Python
python 构造三维全零数组的方法
2018/11/12 Python
解决pyecharts运行后产生的html文件用浏览器打开空白
2020/03/11 Python
Python Opencv图像处理基本操作代码详解
2020/08/31 Python
CSS3网格的三个新特性详解
2014/04/04 HTML / CSS
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
Foot Locker意大利官网:全球领先的运动鞋和服装零售商
2017/05/30 全球购物
乌克兰电子和家用电器商店:Foxtrot
2019/07/23 全球购物
澳洲本土太阳镜品牌:Quay Australia
2019/07/29 全球购物
个人找工作自荐信格式
2013/09/21 职场文书
应届毕业生自荐书
2014/06/18 职场文书
机电系毕业生求职信
2014/07/11 职场文书
幼儿教师继续教育培训心得体会
2016/01/19 职场文书
redis连接被拒绝的解决方案
2021/04/12 Redis
python中opencv实现图片文本倾斜校正
2021/06/11 Python
浅谈Redis变慢的原因及排查方法
2022/06/21 Redis