原生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 06 Javascript
原生js实现跨浏览器获取鼠标按键的值
Apr 08 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
Jan 05 Javascript
轻松学习jQuery插件EasyUI EasyUI创建CRUD应用
Nov 30 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
javascript实现表单验证
Jan 29 Javascript
对比分析Django的Q查询及AngularJS的Datatables分页插件
Feb 07 Javascript
input框中自动展示当前日期yyyy/mm/dd的实现方法
Jul 06 Javascript
微信小程序实现点击返回顶层的方法
Jul 12 Javascript
分析JS单线程异步io回调的特性
Dec 01 Javascript
jquery判断滚动条距离顶部的距离方法
Sep 05 jQuery
Vue监听一个数组id是否与另一个数组id相同的方法
Sep 26 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
当年上海收录机产品生产,进口和价格情况
2021/03/04 无线电
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
PHP连接access数据库
2015/03/27 PHP
php实现的xml操作类
2016/01/15 PHP
javascript转换字符串为dom对象(字符串动态创建dom)
2010/05/10 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
JavaScript中的闭包介绍
2015/03/15 Javascript
基于jquery实现鼠标左右拖动滑块滑动附源码下载
2015/12/23 Javascript
javascript实现input file上传图片预览效果
2015/12/31 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
jQuery判断checkbox选中状态
2016/05/12 Javascript
IE下JS保存图片的简单实例
2016/07/15 Javascript
js获取form表单所有数据的简单方法
2016/08/18 Javascript
JS匿名函数类生成方式实例分析
2016/11/26 Javascript
利用D3.js实现最简单的柱状图示例代码
2016/12/09 Javascript
详解node中创建服务进程
2017/05/09 Javascript
微信浏览器禁止页面下拉查看网址实例详解
2017/06/28 Javascript
jQuery实现菜单栏导航效果
2017/08/15 jQuery
Nodejs使用archiver-zip-encrypted库加密压缩文件时报错(解决方案)
2019/11/18 NodeJs
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
[40:29]2018DOTA2亚洲邀请赛 4.7总决赛 LGD vs Mineski 第一场
2018/04/10 DOTA
python通过urllib2获取带有中文参数url内容的方法
2015/03/13 Python
Python 点击指定位置验证码破解的实现代码
2019/09/11 Python
Python爬取新型冠状病毒“谣言”新闻进行数据分析
2020/02/16 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
美国女鞋品牌:naturalizer(娜然)
2016/08/01 全球购物
发展部经理职责规定
2014/02/22 职场文书
亲子活动总结
2014/04/26 职场文书
党员转正介绍人意见
2015/06/03 职场文书
2016大学军训心得体会
2016/01/11 职场文书
python基础之爬虫入门
2021/05/10 Python
vue使用Google Recaptcha验证的实现示例
2021/08/23 Vue.js