基于JavaScript实现轮播图原理及示例
发布时间 - 2026-01-10 23:04:58 点击率:次网上有很多的例子介绍,在这里我所做的无缝滚动就是 通过改变元素的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代码
# 小圆点
# 第一张
# 鼠标
# 第一个
# 要做
# 几张
# 几个
# 在这里
# 放在
# 有可能
# 在这
# 也要
# 有很多
# 是从
# 它是
# 第二个
# 只剩下
# 要对
# 所做
# 如图
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
HTML5打空格有哪些误区_新手常犯的空格使用错误【技巧】
Laravel如何使用Guzzle调用外部接口_Laravel发起HTTP请求与JSON数据解析【详解】
Laravel如何创建自定义Artisan命令?(代码示例)
手机网站制作与建设方案,手机网站如何建设?
移动端脚本框架Hammer.js
Laravel的契約(Contracts)是什么_深入理解Laravel Contracts与依赖倒置
微信小程序 配置文件详细介绍
高防网站服务器:DDoS防御与BGP线路的AI智能防护方案
javascript中数组(Array)对象和字符串(String)对象的常用方法总结
Gemini手机端怎么发图片_Gemini手机端发图方法【步骤】
如何在阿里云域名上完成建站全流程?
制作网站软件推荐手机版,如何制作属于自己的手机网站app应用?
Win11怎么恢复误删照片_Win11数据恢复工具使用【推荐】
微信小程序 scroll-view组件实现列表页实例代码
Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】
香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧
Laravel怎么配置不同环境的数据库_Laravel本地测试与生产环境动态切换【方法】
Android利用动画实现背景逐渐变暗
悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤
如何使用 jQuery 正确渲染 Instagram 风格的标签列表
uc浏览器二维码扫描入口_uc浏览器扫码功能使用地址
详解Android——蓝牙技术 带你实现终端间数据传输
怎样使用JSON进行数据交换_它有什么限制
如何在IIS7上新建站点并设置安全权限?
如何撰写建站申请书?关键要点有哪些?
软银砸40亿美元收购DigitalBridge 强化AI资料中心布局
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
什么是javascript作用域_全局和局部作用域有什么区别?
开心动漫网站制作软件下载,十分开心动画为何停播?
深圳网站制作公司好吗,在深圳找工作哪个网站最好啊?
如何快速生成ASP一键建站模板并优化安全性?
如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程
如何为不同团队 ID 动态生成多个独立按钮
如何在新浪SAE免费搭建个人博客?
Google浏览器为什么这么卡 Google浏览器提速优化设置步骤【方法】
如何在IIS管理器中快速创建并配置网站?
php485函数参数是什么意思_php485各参数详细说明【介绍】
微信推文制作网站有哪些,怎么做微信推文,急?
如何快速生成可下载的建站源码工具?
js实现点击每个li节点,都弹出其文本值及修改
Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】
制作企业网站建设方案,怎样建设一个公司网站?
专业商城网站制作公司有哪些,pi商城官网是哪个?
微信小程序 input输入框控件详解及实例(多种示例)
laravel怎么配置和使用PHP-FPM来优化性能_laravel PHP-FPM配置与性能优化方法
如何快速搭建高效服务器建站系统?
javascript中闭包概念与用法深入理解
高端建站三要素:定制模板、企业官网与响应式设计优化
电商网站制作价格怎么算,网上拍卖流程以及规则?
Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程

