全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

基于JavaScript实现轮播图原理及示例

网上有很多的例子介绍,在这里我所做的无缝滚动就是 通过改变元素的left值让图片呈现左右滚动的效果。

我们首先看一下 div+css 的结构样式:

div+css代码

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title></title>
 <style type="text/css">
 *{
 margin: 0;
 padding: 0;
 }
 ul,ol{
 list-style: none;
 }
 /*消除图片底部3像素距离*/
 img{
 vertical-align: top;
 }
 .scroll{
 width: 500px;
 height: 200px;
 margin: 100px auto;
 border: 1px solid #ccc;
 padding: 7px;
 overflow: hidden;
 position: relative;
 }
 .box{
 width: 500px;
 height: 200px;
 overflow: hidden;
 position: relative;
 }
 .box ul{
 width: 600%;
 position: absolute;
 left: 0;
 top: 0;
 }
 .box ul li{
 float: left;
 }
 .scroll ol{
 position: absolute;
 right: 10px;
 bottom: 10px;

 }
 .scroll ol li{
 float: left;
 width: 20px;
 height: 20px;
 background: pink;
 text-align: center;
 line-height: 20px;
 border-radius: 50%;
 background-color: pink; 
 margin-left:10px ;
 cursor: pointer;
 }
 .scroll ol li.current{
 background-color: purple;
 }
 </style>
 </head>
 <body>
 <div id="scroll" class="scroll">
 <div id="box" class="box">
 <ul id="ul">
 <li><img src="images/1.jpg" width="500" height="200"></li>
 <li><img src="images/2.jpg" width="500" height="200"></li>
 <li><img src="images/3.jpg" width="500" height="200"></li>
 <li><img src="images/4.jpg" width="500" height="200"></li>
 <li><img src="images/5.jpg" width="500" height="200"></li>
 </ul>
 <ol id="ol">
 <li class="current">1</li>
 <li>2</li>
 <li>3</li>
 <li>4</li>
 <li>5</li>
 </ol>
 </div>
 </div>
 </body>
</html>

展示效果如图:

接下来js代码,再此之前我们要明白,小圆点 1 2 3 并不是写死的,它是根据ul li中的图片张数来决定的 ,所以我们要先把div中ol li中的代码去掉。

要实现无缝滚动就需要多一张图片才行 ,即克隆第一张图片,放到最后面。此时css布局保留,div中只剩下:

<body>
 <div id="scroll" class="scroll">
 <div id="box" class="box">
 <ul id="ul">
 <li><img src="images/1.jpg" width="500" height="200"></li>
 <li><img src="images/2.jpg" width="500" height="200"></li>
 <li><img src="images/3.jpg" width="500" height="200"></li>
 <li><img src="images/4.jpg" width="500" height="200"></li>
 <li><img src="images/5.jpg" width="500" height="200"></li>
 </ul> 
 </div>
 </div>
 </body>

此时我们用js代码生成小圆点

var scroll = document.getElementById("scroll"); // 获得大盒子
var ul = document.getElementById("ul"); // 获得ul
var ulLis = ul.children;// 获得ul的盒子 以此来生成ol中li的个数
var liWidth = ul.children[0].offsetWidth;// 获得每个li的宽度
 // 操作元素
 // 因为要做无缝滚动,所以要克隆第一张,放到最后一张后面
 // 1. 克隆元素
 ul.appendChild(ul.children[0].cloneNode(true));

 // 2.创建ol 和li
 vaar ol = document.createElement("ol");//创建ol元素
 scroll.appendChild(ol);// 把ol放到scroll盒子里面去
 for (var i=0;i<ulLis.length-1;i++) {
 var li = document.createElement("li");// 创建li元素
 li.innerHTML = i + 1;// 给li里面添加文字 1 2 3 4 5
 ol.appendChild(li);// 将li元素添加到ol里面
 }
ol.children[0].className = "current";// ol中的第一个li背景色为purple

此时ol li元素即小圆点创建完毕 我们接着用js做动画

动画部分包括:

1.鼠标经过第几个小圆点,就要展示第几张图片,并且小圆点的颜色也发生变化
2.图片自动轮播,(这需要一个定时器)
3.鼠标经过图片,图片停止自动播放(这需要清除定时器)
4.鼠标离开图片,图片继续自动轮播 (重新开始定时器)
这里我们封装了一个animate()动画函数

// 动画函数 第一个参数,代表谁动 第二个参数 动多少
// 让图片做匀速运动,匀速动画的原理是 当前的位置 + 速度 即 offsetLeft + speed

 function animate(obj,target){
 // 首先清除掉定时器
 clearInterval(obj.timer);
 // 用来判断 是+ 还是 - 即说明向左走还是向右走
 var speed = obj.offsetLeft < target ? 15 : -15;
 obj.timer = setInterval(function(){
 var result = target - obj.offsetLeft;//它们的差值不会超过speed
 obj.style.left = obj.offsetLeft + speed + "px";
 // 有可能有小数的存在,所以在这里要做个判断 
 if (Math.abs(result) <= Math.abs(speed)) {
 clearInterval(obj.timer);
 obj.style.left = target + "px";
 }
 },10);
 }

定时器 函数

var timer = null; // 轮播图的定时器
 var key = 0;// 控制播放的张数
 var circle = 0;// 控制小圆点

 timer = setInterval(autoplay,1000);// 自动轮播
 function autoplay(){
 /*自动轮播时,要对播放的张数key进行一个判断,如果播放的张数超过ulLis.length-1,
 就要重头开始播放. 因为我们克隆了第一张并将其放在最后面,所以我们要从第二张图片开始播放*/
 key++; // 先++
 if(key > ulLis.length-1){// 后判断

 ul.style.left = 0; // 迅速调回
 key = 1; // 因为第6张是第一张,所以播放的时候是从第2张开始播放
 }
 // 动画部分
 animate(ul,-key*liWidth);
 // 小圆点circle 当显示第几张图片是,对应的小圆点的颜色也发生变化

 /*同理,对小圆点也要有一个判断*/
 circle++;
 if (circle > olLis.length-1) {
 circle = 0;
 }
 // 小圆点颜色发生变化
 for (var i = 0 ; i < olLis.length;i++) {
 // 先清除掉所用的小圆点类名
 olLis[i].className = ""; 
 }
 // 给当前的小圆点 添加一个类名
 olLis[circle].className = "current";

 }

好啦,这里我们展示了主要代码,具体代码,查看这里下载js实现轮播效果

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


# js轮播原理  # js轮播图原理  # js轮播图  # js基于myFocus实现轮播图效果  # js实现炫酷的左右轮播图  # JS轮播图中缓动函数的封装  # JS仿京东移动端手指拨动切换轮播图效果  # javascript轮播图算法  # 原生js实现网易轮播图效果  # 原生Javascript和jQuery做轮播图简单例子  # javascript经典特效分享 手风琴、轮播图、图片滑动  # 完美实现八种js焦点轮播图(下篇)  # 轮播图组件js代码  # 小圆点  # 第一张  # 鼠标  # 第一个  # 要做  # 几张  # 几个  # 在这里  # 放在  # 有可能  # 在这  # 也要  # 有很多  # 是从  # 它是  # 第二个  # 只剩下  # 要对  # 所做  # 如图 


相关文章: Python多线程使用规范_线程安全解析【教程】  建站之星收费标准详解:套餐费用及年费价格表一览  淘宝制作网站有哪些,淘宝网官网主页?  公司网站制作需要多少钱,找人做公司网站需要多少钱?  孙琪峥织梦建站教程如何优化数据库安全?  成都网站制作公司哪家好,四川省职工服务网是做什么用?  如何在阿里云完成域名注册与建站?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  ,怎么用自己头像做动态表情包?  网站图片在线制作软件,怎么在图片上做链接?  如何高效利用亚马逊云主机搭建企业网站?  宁波自助建站系统如何快速打造专业企业网站?  网站建设制作需要多少钱费用,自己做一个网站要多少钱,模板一般多少钱?  如何选择高效可靠的多用户建站源码资源?  ui设计制作网站有哪些,手机UI设计网址吗?  seo网站制作优化,网站SEO优化步骤有哪些?  制作证书网站有哪些,全国城建培训中心证书查询官网?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  寿县云建站:智能SEO优化与多行业模板快速上线指南  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?  巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成  学校免费自助建站系统:智能生成+拖拽设计+多端适配  网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?  长沙企业网站制作哪家好,长沙水业集团官方网站?  香港服务器如何优化才能显著提升网站加载速度?  如何选择适合PHP云建站的开源框架?  建站之星代理商如何保障技术支持与售后服务?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  网站制作的方法有哪些,如何将自己制作的网站发布到网上?  如何在Golang中使用encoding/gob序列化对象_存储和传输数据  小米网站链接制作教程,请问miui新增网页链接调用服务有什么用啊?  建站之星上传入口如何快速找到?  C++中的Pimpl idiom是什么,有什么好处?(隐藏实现)  如何在阿里云部署织梦网站?  建站主机系统SEO优化与智能配置核心关键词操作指南  较简单的网站制作软件有哪些,手机版网页制作用什么软件?  香港服务器WordPress建站指南:SEO优化与高效部署策略  湖州网站制作公司有哪些,浙江中蓝新能源公司官网?  如何通过云梦建站系统实现SEO快速优化?  ,南京靠谱的征婚网站?  如何在自有机房高效搭建专业网站?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  如何访问已购建站主机并解决登录问题?  建站之星代理如何获取技术支持?  免费网站制作模板下载,除了易企秀之外还有什么H5平台可以制作H5长页面,最好是免费的?  宝塔新建站点为何无法访问?如何排查?  如何用低价快速搭建高质量网站?  上海网站制作开发公司,上海买房比较好的网站有哪些?  如何快速搭建安全的FTP站点? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。