原生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 中debug方式
Feb 07 Javascript
父子窗体间传递JSON格式的数据的代码
Dec 25 Javascript
js计算字符串长度包含的中文是utf8格式
Oct 15 Javascript
简体中文转换繁体中文(实现代码)
Dec 25 Javascript
jquery.hotkeys监听键盘按下事件keydown插件
May 11 Javascript
JavaScript模拟深蓝vs卡斯帕罗夫的国际象棋对局示例
Apr 22 Javascript
使用AJAX实现Web页面进度条的实例分享
May 06 Javascript
VueJS如何引入css或者less文件的一些坑
Apr 25 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
Oct 15 jQuery
Vue中this.$router.push参数获取方法
Feb 27 Javascript
vue 全局封装loading加载教程(全局监听)
Nov 05 Javascript
JS封装cavans多种滤镜组件
Feb 15 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
Yii使用CLinkPager分页实例详解
2014/07/23 PHP
php遍历目录方法小结
2015/03/10 PHP
Zend Framework过滤器Zend_Filter用法详解
2016/12/09 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
javascript removeChild 使用注意事项
2009/04/11 Javascript
JQuery Dialog(JS 模态窗口,可拖拽的DIV)
2010/02/07 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
js操作label给label赋值及取label的值示例
2013/11/07 Javascript
将中国标准时间转换成标准格式的代码
2014/03/20 Javascript
jquery实现的横向二级导航效果代码
2015/08/26 Javascript
BootStrap的弹出框(Popover)支持鼠标移到弹出层上弹窗层不隐藏的原因及解决办法
2016/04/03 Javascript
React快速入门教程
2017/01/17 Javascript
jQuery实用密码强度检测
2017/03/02 Javascript
axios基本入门用法教程
2017/03/25 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
JavaScript判断变量名是否存在数组中的实例
2017/12/28 Javascript
react 组件传值的三种方法
2019/06/03 Javascript
使用JS location实现搜索框历史记录功能
2019/12/23 Javascript
JS实现动态无缝轮播
2020/01/11 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
Python中的字典与成员运算符初步探究
2015/10/13 Python
python使用xlrd与xlwt对excel的读写和格式设定
2017/01/21 Python
django之session与分页(实例讲解)
2017/11/13 Python
详解appium+python 启动一个app步骤
2017/12/20 Python
python 显示数组全部元素的方法
2018/04/19 Python
Django 日志配置按日期滚动的方法
2019/01/31 Python
使用python serial 获取所有的串口名称的实例
2019/07/02 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
利用 Python ElementTree 生成 xml的实例
2020/03/06 Python
Django 项目布局方法(值得推荐)
2020/03/22 Python
餐厅楼面主管岗位职责范本
2014/02/16 职场文书
小学教师师德师风自我评价
2015/03/04 职场文书
对公司的意见和建议
2015/06/04 职场文书
python实现大文本文件分割成多个小文件
2021/04/20 Python
python库sklearn常用操作
2021/08/23 Python
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis