原生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 相关文章推荐
js 禁用浏览器的后退功能的简单方法
Dec 10 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
Apr 05 Javascript
jQuery关于导航条背景切换效果实现示例
Sep 04 Javascript
JavaScript获取网页表单提交方式的方法
Apr 02 Javascript
JavaScript中的setUTCDate()方法使用详解
Jun 11 Javascript
Javascript BOM学习小结(六)
Nov 26 Javascript
基于Bootstrap重置输入框内容按钮插件
May 12 Javascript
js实现自定义路由
Feb 04 Javascript
Angular angular-file-upload文件上传的示例代码
Aug 23 Javascript
对vue中v-if的常见使用方法详解
Sep 28 Javascript
详解jQuery设置内容和属性
Apr 11 jQuery
Vue实现手机计算器
Aug 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 Smarty生成EXCEL文档的代码
2008/08/23 PHP
PHP中的生成XML文件的4种方法分享
2012/10/06 PHP
PHPMailer使用QQ邮箱实现邮件发送功能
2017/08/18 PHP
jQuery EasyUI API 中文文档 - Form表单
2011/10/06 Javascript
jQuery load方法用法集锦
2011/12/06 Javascript
纯js简单日历实现代码
2013/10/05 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
JavaScript 浏览器对象模型BOM使用介绍
2015/04/13 Javascript
JavaScript计算某一天是星期几的方法
2015/08/05 Javascript
JavaScript省市区三级联动菜单效果
2016/09/21 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
详解JavaScript 中 if / if...else...替换方式
2018/07/15 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
你不可不知的Vue.js列表渲染详解
2019/10/01 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
windows上安装Anaconda和python的教程详解
2017/03/28 Python
django orm 通过related_name反向查询的方法
2018/12/15 Python
python os.fork() 循环输出方法
2019/08/08 Python
将Pytorch模型从CPU转换成GPU的实现方法
2019/08/19 Python
python requests证书问题解决
2019/09/05 Python
Django 创建后台,配置sqlite3教程
2019/11/18 Python
Python变量、数据类型、数据类型转换相关函数用法实例详解
2020/01/09 Python
Python Excel vlookup函数实现过程解析
2020/06/22 Python
Python 防止死锁的方法
2020/07/29 Python
写好求职信第一句话的技巧
2013/10/26 职场文书
物流管理应届生求职信
2013/11/07 职场文书
信息管理员岗位职责
2013/12/01 职场文书
计算机专业学生求职信分享
2013/12/15 职场文书
学生抄袭作业的检讨书
2014/10/02 职场文书
承诺保证书格式
2015/02/28 职场文书
老乡聚会通知
2015/04/23 职场文书
社区青年志愿者活动总结
2015/05/06 职场文书
初中体育课教学反思
2016/02/16 职场文书
SpringBoot中获取profile的方法详解
2022/04/08 Java/Android
Golang Web 框架Iris安装部署
2022/08/14 Python