js代碼編寫無縫輪播圖
本文實例為大家分享了js編寫無縫輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
前言
這個是一個輪播圖
提示:
請讓最后一個img和第一個img是一張圖片相同
且 li數(shù)目為img數(shù)目-1;
一、無縫輪播圖
讓第一張和最后一張相同
type:第一張和最后一張相同;
在最后一張向下一張切換時,立刻跳到第一張 然后向第二張正常切換
二、使用步驟
1.html代碼
代碼如下(示例):
<div class="banner"> <div class="qh"> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> <div></div> </div> <div class="left"></div> <div class="right"></div> <ul class="banner_img clear"> <li> <img src="img/1.png" alt=""> </li> <li> <img src="img/2.png" alt=""> </li> <li> <img src="img/3.png" alt=""> </li> <li> <img src="img/4.png" alt=""> </li> <li> <img src="img/5.png" alt=""> </li> <li> <img src="img/6.png" alt=""> </li> <li> <img src="img/7.png" alt=""> </li> <li> <img src="img/1.png" alt=""> </li> </ul> </div>
css代碼
*{
margin:0;
padding:0;
}
.banner {
position: relative;
margin: auto;
margin-top: 20px;
width: 1140px;
height: 600px;
border: 1px solid #000;
overflow: hidden;
}
.banner ul {
position: relative;
width: 10000px;
}
.banner ul li {
width: 1140px;
height: 100%;
float: left;
}
.banner ul img {
width: 1140px;
height: 100%;
object-fit: cover;
}
.banner>div {
position: absolute;
}
.banner .qh {
position: absolute;
bottom: 0;
right: 0;
height: 20px;
z-index: 1;
}
.banner .qh div {
margin-right: 10px;
width: 10px;
height: 10px;
background: transparent;
border: 1px solid #f0f;
border-radius: 5px;
float: left;
z-index: 1;
}
.left{
top: 0;
bottom: 0;
margin: auto;
height: 40px;
width: 20px;
background: #f0f;
left: 0;
z-index: 1;
}
.right{
top: 0;
bottom: 0;
margin: auto;
height: 40px;
background: #f0f;
width: 20px;
right: 0;
z-index: 1;
}
2.js代碼
代碼如下:
startMove是一個運動框架 緩沖運動;當然你也可以用其他的
var odiv = document.querySelector(".banner");
var oul = document.querySelector(".banner_img");
var aimg = oul.querySelectorAll("img");
var oqh = document.querySelector(".qh")
var aqh_div = oqh.querySelectorAll("div");
var alist = aimg[0].offsetWidth;
var i=0;
init();
function init(){
for (var j=0; j<aimg.length-1;j++) {
aqh_div[j].style.background="transparent";
}
if (i<aimg.length-1) {
aqh_div[i].style.background="#f0f";
}else{
aqh_div[0].style.background="#f0f";
}
}
function next() {//下一張
i++;
let left =i*(-alist);
if (left <= -alist * (aimg.length)) {
oul.style.left = "0px";
i=1;
left =-alist*i;
}
startMove(oul, { left: left });
init();
}
function back() {//上一張
i--;
let left = i*(-alist);
if(i<0) {
oul.style.left = (aimg.length-1)* (-alist)+"px";
i=aimg.length-2;
left= i*(-alist);
}
startMove(oul, { left: left });
init();
}
function move(i) {//跳到第i張 i從0開始
window.i=i;
left = i* (-alist);
startMove(oul, { left: left });
init();
}
for (let i in aqh_div) {
aqh_div[i].onclick = function () {
move(i);
console.log(i);
}
}
//下面是一個移入div暫停計時器 移出打開計時器
odiv.Interval = setInterval(next, 2000);
odiv.onmouseenter = function () {
clearInterval(odiv.Interval);
};
odiv.onmouseleave = function () {
clearInterval(odiv.Interval);
odiv.Interval = setInterval(next, 2000);
};
//下面是兩個左右切換的按鈕
var left_btn=document.querySelector(".left");
var right_btn=document.querySelector(".right");
left_btn.onclick=function(){
back();
}
right_btn.onclick=function(){
next();
}
//下面是一個運動框架 第一個參數(shù)是運動的對象 第二個為json對象{要改變的屬性:值}
// 第三個為運動結(jié)束后要做到事情 參數(shù)是一個函數(shù)
/**
*
* @param obj 運動的對象
* @param json {width:400, height:400}
* @param fnEnd回調(diào)
*/
function startMove(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var bStop = true;
for (attr in json) {
// 1. 取得當前的值(可以是widht,height,opacity等的值)
var objAttr = 0;
if (attr == "opacity") {
objAttr = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
objAttr = parseInt(getStyle(obj, attr));
}
// 2.計算運動速度
var iSpeed = (json[attr] - objAttr) / 50;//緩沖運動
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
// 3. 檢測所有運動是否到達目標
if (objAttr != json[attr]) {
bStop = false;
}
if (attr == "opacity") {
obj.style.filter = 'alpha(opacity=' + (objAttr + iSpeed) + ')';
obj.style.opacity = (objAttr + iSpeed) / 100;
} else {
obj.style[attr] = objAttr + iSpeed + 'px';// 需要又.屬性名的形式改成[]
}
}
if (bStop) { // 表示所有運動都到達目標值
clearInterval(obj.timer);
if (fn) {
fn();
}
}
}, 10);
}
/**
* 獲取行間/內(nèi)聯(lián)/外部樣式,無法設(shè)置
* @param obj
* @param attr
*/
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript async&await方法中的異常處理方案
在 async/await 方法中,可以使用 try-catch 塊來處理異常,通過使用 try-catch,可以捕獲異步操作中拋出的異常,并在 catch 塊中進行適當?shù)奶幚?本文給大家詳細介紹了async&await方法中異常如何處理,需要的朋友可以參考下2023-08-08
微信小程序防止多次點擊跳轉(zhuǎn)(函數(shù)節(jié)流)
這篇文章主要介紹了微信小程序防止多次點擊跳轉(zhuǎn)問題(函數(shù)節(jié)流),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09
javascript的parseFloat()方法精度問題探討
javascript中的parseFloat()方法,大家應該不陌生吧,下面為大家介紹下其精度問題,感興趣的朋友不要錯過2013-11-11

