想锻炼一下自己的原生js能力可以从写一个轮播图开始,轮播图的运用想必大家都知道吧,好了废话不多说,开始记笔记了,一些需要注意的点,我都在代码中标注了

首先是构造html:

<div id="container"><div id="list" style="left:-600px"><img src="img/4.jpg" alt="4">
<img src="img/1.jpg" alt="1">
<img src="img/2.jpg" alt="2">
<img src="img/3.jpg" alt="3">
<img src="img/4.jpg" alt="4">
<img src="img/1.jpg" alt="1"></div><div id="buttons">
<span index=1 class="on"></span>
<span index=2></span>
<span index=3></span>
<span index=4></span></div>
<a  id="prev" class="arrow"></a>
<a  id="next" class="arrow"></a>
</div>

这里需要讲一下的是图片本来是4个,但是需要把第4个和第一个分别多加入到第一个位置和最后一个位置,(为何要这一步?是为了实现无缝播放,由于移动时,为了让用户感觉到第4个图片播放完之后,是第一个图片,必须将第4个图片放到第一个图片的前面)并且设置list的偏移量为-600px(-600px是由于设置时将图片4放置在list的第一个位置,而要显示的是图片1,此时图片1的位置是-600px)

然后设置css参数

*{margin: 0; padding: 0; text-decoration: none;}body{padding: 20px;}#container{   position: relative;overflow: hidden; width: 500px; height: 500px; border: 3px solid rgb(247, 250, 203);}/*容器宽高为图片的宽度和高度*/#list{   position: absolute;z-index: 1;width: 3000px; /*list的所有图片数和图片的乘积*/height: 500px;}#list img{float: left;width: 500px;/*规定的图片的宽度*/}#buttons{position: absolute; z-index: 2; bottom: 20px; left: 250px;width: 100px;height: 10px;}#buttons span{float: left; width: 10px;height: 10px;margin-right: 5px;cursor: pointer; border: 1px solid #fff;border-radius: 50%; background: rgb(141, 139, 139);}#buttons .on{background:pink;}.arrow{font-size: 36px; font-weight: bold; line-height: 39px;position: absolute; z-index: 2; top: 180px; display: none;width: 40px; height: 40px;  cursor: pointer; text-align: center; color:pink;background-color: rgb(229, 247, 194);}.arrow:hover{background-color:rgb(194, 212, 156) ;}#container:hover .arrow{display: block;}#prev{left: 20px;}#next{right: 20px;}

最后是js逻辑:

 var  prev=document.getElementById("prev");var  next=document.getElementById("next");var  list=document.getElementById("list");var buttons=document.getElementById("buttons").getElementsByTagName("span");var index=1;var timer;var animated=false;var container=document.getElementById("container");function shownButton(){for(var i=0;i<buttons.length;i++){if(buttons[i].className=="on"){buttons[i].className="";break;  }}buttons[index-1].className="on";
}
function animate(offset){var time=100;//根据图片宽度来,最好和inteval相除为整数,不然后面移动会出问题,var inteval=10;var speed=offset/(time/inteval);animated=true;var newLeft=parseInt(list.style.left)+offset;function go(){if((speed>0&&parseInt(list.style.left)<newLeft)||(speed<0&&parseInt(list.style.left)>newLeft)){list.style.left=parseInt(list.style.left)+speed+"px";setTimeout(go,inteval);//递归函数
        }else{animated=false;if(newLeft>-500){//当大于第一个图的位移量切换到第4张图list.style.left=-2000+"px";};if(newLeft<-2000){//当小于最后一个图的位移量切换到第一张图list.style.left=-500+"px";}   }}go();   }prev.onclick=function(){if(!animated){if(index==1){index=4;//根据自己代码的index值进行修改
          }else{index-=1;}shownButton();animate(500);//传入图片宽度
      }}next.onclick=function(){if(!animated){if(index==4){//根据自己代码的index值进行修改index=1;}else{index+=1;}shownButton();animate(-500);//第一章图片宽度
      }}for(var i=0;i<buttons.length;i++){buttons[i].onclick=function(){if(this.className=="on"){return;}var myIndex=parseInt(this.getAttribute(index));var offset=-500*(myIndex-index);//偏移量根据实际情况修改if(!animated){animate(offset);}index=myIndex;shownButton();}}function play(){timer=setInterval(function(){next.onclick();},2000);  }function stop(){clearInterval(timer);}play();container.onmouseover=stop;container.onmouseout=play;

完整的代码可以去我的github下载,欢迎各位点星星和fork

https://github.com/narrow-gate/lunbo

转载于:https://www.cnblogs.com/yuan233/p/10293194.html

原生js实现一个简单的轮播图相关推荐

  1. 制作一个简单的轮播图

    记录一下轮播图制作(这里用的是原生js制作的) 前期准备工作 1.自己用的顺手的开发工具,我这里用的时HBuilder来写的 2.创建项目 3.在项目中创建images.css.js文件夹,把需要制作 ...

  2. swiper怎么在HTML引入JS文件,Swiper.js插件超简单实现轮播图

    Swiper是纯javascript打造的滑动特效插件,面向手机.平板电脑等移动终端.能实现触屏焦点图.触屏Tab切换.触屏多图切换等常用效果.超好用 话不多说,直接上教程 1.首先加载插件,需要用到 ...

  3. html js轮播图无白链接,JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)...

    简介这篇文章主要介绍了JavaScript:100%原生js实现左右切换的轮播图(无延迟加载)以及相关的经验技巧,文章约11114字,浏览量505,点赞数3,值得参考! *{ margin:0; pa ...

  4. 制作一个简单的轮播图(详解新手教学)

    制作一个简单的轮播图(详解新手教学) 相信很多初学者,无论是前端还是后端,对于制作页面时,都想自己亲手制作一个轮播图. 如何制作一个轮播图: 基础知识:有HTML,Css,js基础 本文使用技术: H ...

  5. jquery手写轮播图_用jQuery如何手写一个简单的轮播图?(附代码)

    用jQuery如何手写一个简单的轮播图?下面本篇文章通过代码示例来给大家介绍一下.有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助. 用 jQuery 手写轮播图 先上个效果截图: 主要 ...

  6. 使用原生JS和使用插件实现轮播图

    网页上的大致轮播图的滚动就是上面的演示 轮播图的制作 在制作轮播图的过程中我分成3步:框架的搭建--样式的装扮--动画效果. 1.框架的搭建 如下代码展示,就是先在HTML里搭建出一个框架来: < ...

  7. 使用jQuery,写一个简单的轮播图,实现切换功能!

    1.谈到jquery,想必大家都知道,它是一个js库.使用起来简单又方便,接下来就给大家看看我用jquery实现的轮播图吧! <!DOCTYPE html> <html lang=& ...

  8. 学习使用vue实现一个简单的轮播图

    目录 关于template外壳: 关于图片的自动切换的处理: 为什么要把第一张图片外的 li 克隆一份放到 li 列表的最后: 函数节流处理 : 关于template外壳: 创建一个div,用于内容的 ...

  9. 使用jQuery写一个简单的轮播图(笔记)

    html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="U ...

最新文章

  1. android中仿qq最新版抽屉,Android实现3种侧滑效果(仿qq侧滑、抽屉侧滑、普通侧滑)...
  2. kibana操作elasticsearch:匹配查询(match)
  3. html5 百度地图api文档,开发指南--百度地图JavaScript API大众版.doc
  4. PAP CHAP认证
  5. Oracle Database 中 B*Tree 索引内部维护
  6. emq 重启_EMQ集群
  7. Vue3:集成wangEditor富文本编辑器
  8. git使用笔记(二)分支与合并
  9. 0918类对象重载,作业5
  10. 3至六年级计算机知识,小学三至六年级下册信息技术教学计划范文
  11. java-序列化以及反序列化
  12. 关于Winxp U盘无法复制磁盘写保护解决方法
  13. 输入10个互不相同的数字并分成5对,问有多少种分法。
  14. Unity制作别踩白块儿
  15. 2个硬盘离线导致raid崩溃的数据恢复案例
  16. 案例研究:什么是自动驾驶?
  17. 如何快速做一个HTML5移动播放器
  18. Java上传图片预览并通过后端压缩
  19. 怎么清洁个人台式计算机,如何清理台式电脑
  20. 中班音乐计算机活动课,幼儿园中班韵律活动教案

热门文章

  1. java ajax解析json数据_利用AJAX向后台servlet传JSON数据,后台利用fastjson进行解析
  2. java面试题九 数组初始化
  3. excel如何在双引号里面引用变量
  4. oracle基本结构
  5. python echarts mysql python_Django中从mysql数据库中获取数据传到echarts方式
  6. python3mysql包_python3读取MySQL-Front的MYSQL密码
  7. HTTP 状态码常用对照表
  8. 《深入理解NGINX 模块开发与架构解析》之摘抄学习
  9. c库函数-strtol()介绍
  10. 《美团网编程题》奇数位丢弃