原生JS实现图片轮播切换效果


Posted in Javascript onDecember 15, 2016

首先来分析一下轮播图效果的实现原理:

1、父元素作为显示窗口,大小固定超出部分隐藏,即设置overflow:hidden;

2、子元素存放图片列表用ul,ul固定定位,参照为父元素,即父元素position:relative;ul元素position:absolute;

3、一个li即一张图片的宽度为父元素的显示宽度

4、初始时,ul的left为0,这时第一张图片即第一个li显示

5、点击下一张按钮,将整个ul左移,使第二个li对齐父元素的左边框,此时ul的left为负的一个li的宽度

6、点击上一张按钮,将整个ul右移

7、对特殊情况进行处理,即第一张图时点上一张,最后一张图时点下一张

第一张图时点上一张,我们滚动到最后一张图,整个ul左移,即把left值改为负的n-1张图的宽度;

最后一张图时点下一张,我们滚到第一张图的位置,整个ul右移,即把left值改为0

用一张图来帮助理解:

原生JS实现图片轮播切换效果

修改ul元素的left值很简单ul.style.left=设定值,就可以了,但我们想有一个滑动的效果,那我们需要用setInterval来实现

最后的效果如下:

原生JS实现图片轮播切换效果

动图不能录制太大CSDN有2M的限制_(:з?∠)_

下面放代码

script部分

<script>
 window.onload= function () {
  var nav=document.getElementById("nav").getElementsByTagName("li");
  var img=document.getElementById("imgList");
  var prev=document.getElementById("prev");
  var next=document.getElementById("next");
  var index=0;//当前图片序列号
  var timer;//定时器名字
  var iSpeed=-10;//滚动的速度
  function goRoll(){
   timer=setInterval(function () {
    img.style.left=img.offsetLeft+iSpeed+'px';
    var stop=-index*870+'px';//当达到目标位置是停止定时器
    if(img.style.left==stop){
     iSpeed=-10;
     clearInterval(timer);
    }
   },10)
  }
//  上一张和下一张点击效果
  prev.onclick= function () {
   if(index==0){
    index=2;
    iSpeed=-20;
   }else{
    index--;
    iSpeed=10;
   }
   goRoll();
   //img.style.left=-index*870+'px';

  };
  next.onclick= function () {
   if(index==2){
    index=0;
    iSpeed=20;
   }else{
    index++;
    iSpeed=-10;
   }
   goRoll();
   //img.style.left=-index*870+'px';
  };
 }
</script>

html放一下

<div class="panel center-panel bc_rice">
 <div class="panel-box">
  <a class="prev-btn" id="prev"></a>
  <div class="img-box">
   <div class="list-box">
    <ul class="img-list" id="imgList">
     <li>
      <img src="img/c1.jpg"/>
     </li>
     <li>
      <img src="img/c2.jpg"/>
     </li>
     <li>
      <img src="img/c3.jpg"/>
     </li>
    </ul>
   </div>
  </div>
  <a class="next-btn" id="next"></a>
  <img class="mT20" src="img/shadow1.png"/>
 </div>
 <div class="center-line bc_brown"></div>
</div>

CSS放一下

.fb{font-weight:bold;}
.c_fff{color:#fff;}
.f24{font-size:24px;}
.f72{font-size:72px;}
.lh40{line-height:40px;}
.bc_brown{background:#533d3b;}
.bc_green{background:#74cdab;}
.bc_rice{background:#ecf1c8;}
.bc_beige{background:#d1d5b0;}
.mT10{margin-top:10px;}
.mT20{margin-top:20px;}
.mT30{margin-top:30px;}
.mT40{margin-top:40px;}
.tc{text-align:center;}
.dblock{display:block;}
.clearfix:after{content:'';display:block;visibility:hidden;clear:both;line-height:0;font-size:0;}
.clearfix{zoom:1;}
html,body{width:100%;height:100%;font-size:14px;font-family:Myriad Pro;color:#433c3c;}
div,p,a,span,ul,li,em{margin:0;padding:0;}
ul li{list-style-type:none;}
a:hover{cursor:pointer;}
/*main-panel*/
.main-panel{width:100%;min-width:1030px;margin:0 auto;}
.main-panel .panel{width:100%;}
.main-panel .panel .line{width:100%;height:23px;background:url('../img/line.png');}
.main-panel .panel .panel-box{width:960px;height:100%;margin:0 auto;overflow:hidden;position:relative;}
.center-panel{height:510px;position:relative;}
.center-panel .panel-box{width:990px;z-index:1000;}
.center-panel .center-line{height:76px;position:absolute;width:100%;top:200px;z-index:10;}
.center-panel .panel-box a{width:51px;height:82px;display:block;position:absolute;top:200px;}
.center-panel .prev-btn{background:url('../img/Button-left.png');left:0;}
.center-panel .next-btn{background:url('../img/Button-right.png');right:0;}
.center-panel .img-box{width:940px;height:366px;background:url('../img/shadow.png');margin-top:45px;margin-left:10px;overflow:hidden;}
.center-panel .list-box{width:870px;height:334px;margin:16px auto;overflow:hidden;position:relative;}
.center-panel .img-list{width:4000px;height:334px;position:absolute;left:0;}
.center-panel .img-list li{width:870px;height:100%;float:left;}

因为我写了一整个页面都放出来没啥用,所以我只截取了用到的部分。
现在还是有些问题的,比如如果点击过快是会出问题的,这个以后看看能不能完善。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
文字幻灯片
Jun 26 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
Jun 26 Javascript
js 编程笔记 无名函数
Jun 28 Javascript
jquery动态加载js三种方法实例
Aug 03 Javascript
网页下载文件期间如何防止用户对网页进行其他操作
Jun 27 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
浅谈jQuery事件绑定原理
Jan 02 Javascript
初识Javascript小结
Jul 16 Javascript
使用OPENLAYERS3实现点选的方法
Sep 24 Javascript
vue2.0中vue-cli实现全选、单选计算总价格的实例代码
Jul 18 Javascript
layui-table获得当前行的上/下一行数据的例子
Sep 24 Javascript
Antd-vue Table组件添加Click事件,实现点击某行数据教程
Nov 17 Javascript
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Dec 15 #Javascript
利用vue写todolist单页应用
Dec 15 #Javascript
jquery插件bootstrapValidator表单验证详解
Dec 15 #Javascript
jQuery中的100个技巧汇总
Dec 15 #Javascript
JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)
Dec 14 #Javascript
详解jQuery中的事件
Dec 14 #Javascript
JS实现鼠标移上去显示图片或微信二维码
Dec 14 #Javascript
You might like
PHP常用代码
2006/11/23 PHP
php文件读取方法实例分析
2015/06/20 PHP
一个简单的Ext.XTemplate的实例代码
2012/03/18 Javascript
chrome下img加载对height()的影响示例探讨
2014/05/26 Javascript
node.js中的socket.io的广播消息
2014/12/15 Javascript
JavaScript中定义函数的三种方法
2015/03/12 Javascript
跟我学习javascript的执行上下文
2015/11/18 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
Cookies 和 Session的详解及区别
2017/04/21 Javascript
浅谈Vue SPA 首屏加载优化实践
2017/12/15 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
原生JS实现列表子元素顺序反转的方法分析
2018/07/02 Javascript
详解在React中跨组件分发状态的三种方法
2018/08/09 Javascript
解决vue打包 npm run build-test突然不动了的问题
2020/11/13 Javascript
pycharm 使用心得(四)显示行号
2014/06/05 Python
Python实现的百度站长自动URL提交小工具
2014/06/27 Python
python opencv实现运动检测
2018/07/10 Python
对PyTorch torch.stack的实例讲解
2018/07/30 Python
python3 实现一行输入,空格隔开的示例
2018/11/14 Python
Pyqt5 实现跳转界面并关闭当前界面的方法
2019/06/19 Python
python实现静态服务器
2019/09/05 Python
python设置代理和添加镜像源的方法
2020/02/14 Python
值得收藏的HTML5资源(学习html5的朋友可以收藏下)
2010/07/20 HTML / CSS
Tory Burch美国官方网站:美国时尚生活品牌
2016/08/01 全球购物
世界上最好的足球商店:Unisport
2019/03/02 全球购物
软件测试英文面试题
2012/10/14 面试题
Java如何支持I18N?
2016/10/31 面试题
学生打架检讨书
2014/02/14 职场文书
教师党员承诺书2015
2015/01/21 职场文书
小浪底导游词
2015/02/12 职场文书
西安导游词
2015/02/12 职场文书
高中班长竞选稿
2015/11/20 职场文书
Python爬虫实战之爬取京东商品数据并实实现数据可视化
2021/06/07 Python
JS setTimeout与setInterval的区别
2022/04/20 Javascript
python 镜像环境搭建总结
2022/09/23 Python
postgresql中如何执行sql文件
2023/05/08 PostgreSQL