JS+JQuery实现无缝连接轮播图
(编辑:jimmy 日期: 2025/10/25 浏览:3 次 )
我之前写过一个简易版的自动+手动轮播图:简易轮播图
但是这个轮播图在切换的时候是没有实现无缝滚动的,每张图片都是单张切换的,而不是滑动。现在用JQuery实现无缝连接的轮播图。
无缝连接的轮播图的原理如下:
代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>无缝轮播图</title>
</head>
<style type="text/css">
* {
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
#container {
position: relative;
/*轮播图容器的宽高*/
width: 500px;
height: 260px;
margin: 20px auto;
overflow: hidden;
/*溢出隐藏:只显示一张图片*/
}
#container .wrapper {
position: absolute;
top: 0;
left: 0;
/*每张图片的宽度和轮播图容器的宽度相等,
整个图片层长度:500*5=2500,由于克隆了一张,多加一张宽度*/
width: 3000px;
height: 100%;
}
#container .wrapper li {
width: 500px;
height: 100%;
float: left;
}
#container .wrapper li img {
width: 100%;
height: 100%;
vertical-align: middle;
/*去掉未浮动时图片间的上下空隙*/
}
#container .btnLeft,
#container .btnRight {
display: none;
z-index: 999;
width: 30px;
height: 30px;
position: absolute;
top: 50%;
margin-top: -15px;
background-color: #9E9E9E;
border-radius: 20%;
opacity: 60%;
font-size: 20px;
color: #673ab7;
text-align: center;
line-height: 30px;
}
#container .btnLeft {
left: 0;
}
#container .btnRight {
right: 0;
}
#container .btnLeft:hover,
#container .btnRight:hover {
opacity: 70%;
cursor: pointer;
}
/* 鼠标滑过图片的时候显示按钮 */
#container:hover .btnLeft,
#container:hover .btnRight {
display: block;
}
/*圆点层*/
#container .dots {
background: rgba(0, 0, 0, .3);
position: absolute;
left: 50%;
bottom: 10px;
transform: translateX(-50%);
z-index: 999;
padding: 4px;
border-radius: 24px;
}
#container .dots li {
width: 15px;
height: 15px;
border-radius: 50%;
background-color: #9e9e9e;
float: left;
/*可以使用行块盒*/
/*display: inline-block;*/
margin: 0 5px;
cursor: pointer;
}
#container .dots li.active {
background-color: #c74b42;
}
.clearfix::after {
content: "";
display: block;
clear: both;
}
</style>
<body>
<!-- 实现轮播图的容器 -->
<div id="container">
<!-- 存放全部图片的容器 -->
<div class="wrapper">
<!-- LI: 每张图片 -->
<li><img src="/UploadFiles/2021-04-02/0.jpg">
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>无缝轮播图</title>
</head>
<style type="text/css">
* {
margin: 0;
padding: 0;
list-style: none;
text-decoration: none;
}
#container {
position: relative;
/*轮播图容器的宽高*/
width: 500px;
height: 260px;
margin: 20px auto;
overflow: hidden;
/*溢出隐藏:只显示一张图片*/
}
#container .wrapper {
position: absolute;
top: 0;
left: 0;
/*每张图片的宽度和轮播图容器的宽度相等,
整个图片层长度:500*5=2500,由于克隆了一张,多加一张宽度*/
width: 3000px;
height: 100%;
}
#container .wrapper li {
width: 500px;
height: 100%;
float: left;
}
#container .wrapper li img {
width: 100%;
height: 100%;
vertical-align: middle;
/*去掉未浮动时图片间的上下空隙*/
}
#container .btnLeft,
#container .btnRight {
display: none;
z-index: 999;
width: 30px;
height: 30px;
position: absolute;
top: 50%;
margin-top: -15px;
background-color: #9E9E9E;
border-radius: 20%;
opacity: 60%;
font-size: 20px;
color: #673ab7;
text-align: center;
line-height: 30px;
}
#container .btnLeft {
left: 0;
}
#container .btnRight {
right: 0;
}
#container .btnLeft:hover,
#container .btnRight:hover {
opacity: 70%;
cursor: pointer;
}
/* 鼠标滑过图片的时候显示按钮 */
#container:hover .btnLeft,
#container:hover .btnRight {
display: block;
}
/*圆点层*/
#container .dots {
background: rgba(0, 0, 0, .3);
position: absolute;
left: 50%;
bottom: 10px;
transform: translateX(-50%);
z-index: 999;
padding: 4px;
border-radius: 24px;
}
#container .dots li {
width: 15px;
height: 15px;
border-radius: 50%;
background-color: #9e9e9e;
float: left;
/*可以使用行块盒*/
/*display: inline-block;*/
margin: 0 5px;
cursor: pointer;
}
#container .dots li.active {
background-color: #c74b42;
}
.clearfix::after {
content: "";
display: block;
clear: both;
}
</style>
<body>
<!-- 实现轮播图的容器 -->
<div id="container">
<!-- 存放全部图片的容器 -->
<div class="wrapper">
<!-- LI: 每张图片 -->
<li><img src="/UploadFiles/2021-04-02/0.jpg">
JS部分:index.js
function debounce(func, wait, immediate) {
let timer = null,
result = null;
return function anonymous(...args) {
let context = this,
now = immediate && !timer;
clearTimeout(timer);
timer = setTimeout(() => {
timer = null;
!immediate "#container"),
$wrapper = $container.children(".wrapper"),
$btnLeft = $container.find(".btnLeft"),
$btnRight = $container.find(".btnRight"),
$dots = $container.find(".dots"),
$dotList = $dots.find("li");
let autoTimer = null,
interval = 2000,
imgIndex = 0; //当前轮播的图片索引,默认第一张
// 自动轮播
function autoPlay() {
// 让wrapper向左移动
imgIndex++;
/* if(imgIndex === 4) imgIndex = 0; 这样写会导致图片会一下变到第一张,不是无缝滚动
无缝滚动:
1. 把第一张克隆一份放到末尾,wrapper中会比真实的图片层多一张
2. 依然一张张往后滚动,滚动到第5张的时候,继续向后走(imgIndex=6),看到了克隆的第一张,再要向后走的时候,
让其“立即”跳转到真实的第一张(肉眼看不出跳转),然后运动到第二张......
*/
if (imgIndex > 5) {
// 上次显示的是克隆的那张,忽略真实的第一张,让其立即跳转到第二张
$wrapper.css("left", 0);
imgIndex = 1;
}
// 匀速向左移动
// 无动画版:$wrapper.css('transform', 'translate(' + (-imgIndex * 500) + 'px)');
// 动画版:
$wrapper.stop().animate({
left: -imgIndex * 500 //JQ自动补'px'
}, 300);
showDots();
}
// 圆点对焦
function showDots() {
// 由于不能修改imgIndex的值,所以定义一个临时变量
let temp = imgIndex;
temp === 5 "active");
return;
}
$item.removeClass("active");
});
}
//点击圆点
function clickDots() {
$dotList.click(debounce(function () {
let index = $(this).index();
imgIndex = index;
$wrapper.stop().animate({
left: -imgIndex * 500 //JQ自动补'px'
}, 300);
showDots();
},300,true));
}
// 左右按键
function btnClick() {
$btnLeft.click(function () {
imgIndex--;
if (imgIndex < 0) {
// 上次显示的是真实的第一张,忽略克隆的倒数第一张,让其立即跳转倒数第二张
$wrapper.css('left', -2500);
imgIndex = 4;
}
$wrapper.stop().animate({
left: -imgIndex * 500 //JQ自动补'px'
}, 300);
showDots();
});
// 右键点击:相当于自动轮播
$btnRight.click(debounce(autoPlay, 300, true));
}
return {
init: function () {
autoTimer = setInterval(autoPlay, interval);
// 鼠标进入/离开轮播区域时停止/开启自动轮播
$container.on("mouseenter", () => {
clearInterval(autoTimer);
});
$container.on("mouseleave", () => {
autoTimer = setInterval(autoPlay, interval);
});
clickDots();
btnClick();
},
};
})();
bannerModule.init();
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
下一篇:微信小程序弹窗禁止页面滚动的实现代码
几个月来,英特尔、微软、AMD和其它厂商都在共同推动“AI PC”的想法,朝着更多的AI功能迈进。在近日,英特尔在台北举行的开发者活动中,也宣布了关于AI PC加速计划、新的PC开发者计划和独立硬件供应商计划。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。
在此次发布会上,英特尔还发布了全新的全新的酷睿Ultra Meteor Lake NUC开发套件,以及联合微软等合作伙伴联合定义“AI PC”的定义标准。
