实现图片首尾平滑轮播(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 相关文章推荐
js中回调函数的学习笔记
Jul 31 Javascript
jquery+easeing实现仿flash的载入动画
Mar 10 Javascript
JavaScript实现自动生成网页元素功能(按钮、文本等)
Nov 21 Javascript
基于JavaScript实现动态添加删除表格的行
Feb 01 Javascript
使用Bootstrap框架制作查询页面的界面实例代码
May 27 Javascript
js实现可输入可选择的select下拉框
Dec 21 Javascript
Node.js 8 中的 util.promisify的详解
Jun 12 Javascript
JavaScript 判断对象中是否有某属性的常用方法
Jun 14 Javascript
Puppet的一些技巧
Sep 17 Javascript
详解node字体压缩插件font-spider的用法
Sep 28 Javascript
Vue 无限滚动加载指令实现方法
May 28 Javascript
JS轮播图的实现方法
Aug 24 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
PHP中如何定义和使用常量
2013/02/28 PHP
浅谈PHP强制类型转换,慎用!
2013/06/06 PHP
详解PHP防止盗链防止迅雷下载的方法
2017/04/26 PHP
PHP抽象类基本用法示例
2018/12/28 PHP
javascript引用对象的方法代码
2007/08/13 Javascript
javascript 在firebug调试时用console.log的方法
2012/05/10 Javascript
js如何实现设计模式中的模板方法
2013/07/23 Javascript
Jquery增加鼠标中间功能mousewheel的实例代码
2013/09/05 Javascript
jquery衣服颜色选取插件效果代码分享
2015/08/28 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
微信小程序  wx.request合法域名配置详解
2016/11/23 Javascript
Vue的MVVM实现方法
2017/08/16 Javascript
vue实现点击按钮下载文件功能
2019/10/11 Javascript
vue 通过绑定事件获取当前行的id操作
2020/07/27 Javascript
github配置使用指南
2014/11/18 Python
Python中字典和JSON互转操作实例
2015/01/19 Python
python使用PIL模块实现给图片打水印的方法
2015/05/22 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python实现读取邮箱中的邮件功能示例【含文本及附件】
2017/08/05 Python
python中urlparse模块介绍与使用示例
2017/11/19 Python
python读取和保存视频文件
2018/04/16 Python
Python基于pyCUDA实现GPU加速并行计算功能入门教程
2018/06/19 Python
python切片的步进、添加、连接简单操作示例
2019/07/11 Python
Django项目中使用JWT的实现代码
2019/11/04 Python
详解Python list和numpy array的存储和读取方法
2019/11/06 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
安装不同版本的tensorflow与models方法实现
2021/02/20 Python
意大利宠物用品购物网站:Bauzaar
2018/09/15 全球购物
南京青奥会口号
2014/06/12 职场文书
小学绿色学校申报材料
2014/08/23 职场文书
2014年初中班主任工作总结
2014/11/08 职场文书
餐厅保洁员岗位职责
2015/04/10 职场文书
公司车辆管理制度
2015/08/04 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
.Net Core导入千万级数据至Mysql的步骤
2021/05/24 MySQL