实现图片首尾平滑轮播(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 相关文章推荐
单独使用CKFinder选择图片的方法
Aug 21 Javascript
JS代码放在head和body中的区别分析
Dec 01 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
Jan 17 Javascript
jQuery源码分析之jQuery.fn.each与jQuery.each用法
Jan 23 Javascript
jQuery简单tab切换效果实现方法
Apr 08 Javascript
浅谈javascript中onbeforeunload与onunload事件
Dec 10 Javascript
详解基于vue-cli优化的webpack配置
Nov 06 Javascript
在React 组件中使用Echarts的示例代码
Nov 08 Javascript
Bootstrap modal只加载一次数据的解决办法(推荐)
Nov 24 Javascript
JS生成随机打乱数组的方法示例
Dec 23 Javascript
在vue中实现某一些路由页面隐藏导航栏的功能操作
Sep 21 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 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
将博客园(cnblogs.com)数据导入到wordpress的代码
2013/01/06 PHP
数组与类使用PHP的可变变量名需要的注意的问题
2013/06/20 PHP
学习php设计模式 php实现访问者模式(Visitor)
2015/12/07 PHP
Laravel第三方包报class not found的解决方法
2019/10/13 PHP
Laravel框架实现定时Task Scheduling例子
2019/10/22 PHP
ThinkPHP5 框架引入 Go AOP,PHP AOP编程项目详解
2020/05/12 PHP
js实现的星星评分功能函数
2015/12/09 Javascript
Angular2入门--架构总览
2017/03/29 Javascript
兼容浏览器的js事件绑定函数(详解)
2017/05/09 Javascript
使用重写url机制实现验证码换一张功能
2017/08/01 Javascript
Angular2 组件交互实例详解
2017/08/24 Javascript
bootstrap轮播模板使用方法详解
2017/11/17 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
原生JS利用transform实现banner的无限滚动示例代码
2020/06/15 Javascript
python中查看变量内存地址的方法
2015/05/05 Python
详解使用 pyenv 管理多个版本 python 环境
2017/10/19 Python
jupyter notebook引用from pyecharts.charts import Bar运行报错
2020/04/23 Python
Python学习笔记之Break和Continue用法分析
2019/08/14 Python
浅谈Python访问MySQL的正确姿势
2020/01/07 Python
详解django使用include无法跳转的解决方法
2020/03/19 Python
如何解决flask修改静态资源后缓存文件不能及时更改问题
2020/08/02 Python
python3:excel操作之读取数据并返回字典 + 写入的案例
2020/09/01 Python
CSS3 圆角效果
2009/07/15 HTML / CSS
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
video结合canvas实现视频在线截图功能
2018/06/25 HTML / CSS
初中生物教学反思
2014/01/10 职场文书
综合实践教学反思
2014/01/31 职场文书
初一学生评语大全
2014/04/24 职场文书
市场拓展计划书
2014/05/03 职场文书
大学毕业典礼演讲稿
2014/09/09 职场文书
2015年度党风廉政建设工作情况汇报
2015/01/02 职场文书
证劵公司反洗钱宣传活动总结
2015/05/08 职场文书
项目合作意向书
2015/05/08 职场文书
解决redis sentinel 频繁主备切换的问题
2021/04/12 Redis
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis
Python实现Matplotlib,Seaborn动态数据图
2022/05/06 Python