js代碼編寫無縫輪播圖
本文實(shí)例為大家分享了js編寫無縫輪播圖的具體代碼,供大家參考,具體內(nèi)容如下
前言
這個(gè)是一個(gè)輪播圖
提示:
請讓最后一個(gè)img和第一個(gè)img是一張圖片相同
且 li數(shù)目為img數(shù)目-1;
一、無縫輪播圖
讓第一張和最后一張相同
type:第一張和最后一張相同;
在最后一張向下一張切換時(shí),立刻跳到第一張 然后向第二張正常切換
二、使用步驟
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是一個(gè)運(yùn)動框架 緩沖運(yùn)動;當(dāng)然你也可以用其他的
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);
}
}
//下面是一個(gè)移入div暫停計(jì)時(shí)器 移出打開計(jì)時(shí)器
odiv.Interval = setInterval(next, 2000);
odiv.onmouseenter = function () {
clearInterval(odiv.Interval);
};
odiv.onmouseleave = function () {
clearInterval(odiv.Interval);
odiv.Interval = setInterval(next, 2000);
};
//下面是兩個(gè)左右切換的按鈕
var left_btn=document.querySelector(".left");
var right_btn=document.querySelector(".right");
left_btn.onclick=function(){
back();
}
right_btn.onclick=function(){
next();
}
//下面是一個(gè)運(yùn)動框架 第一個(gè)參數(shù)是運(yùn)動的對象 第二個(gè)為json對象{要改變的屬性:值}
// 第三個(gè)為運(yùn)動結(jié)束后要做到事情 參數(shù)是一個(gè)函數(shù)
/**
*
* @param obj 運(yùn)動的對象
* @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. 取得當(dāng)前的值(可以是widht,height,opacity等的值)
var objAttr = 0;
if (attr == "opacity") {
objAttr = Math.round(parseFloat(getStyle(obj, attr)) * 100);
} else {
objAttr = parseInt(getStyle(obj, attr));
}
// 2.計(jì)算運(yùn)動速度
var iSpeed = (json[attr] - objAttr) / 50;//緩沖運(yùn)動
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
// 3. 檢測所有運(yùn)動是否到達(dá)目標(biāo)
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) { // 表示所有運(yùn)動都到達(dá)目標(biāo)值
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)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript前端實(shí)現(xiàn)快照的示例代碼
snapshot 翻譯為快照,用于直觀獲取頁面在某個(gè)運(yùn)行時(shí)的狀態(tài),本文主要為大家詳細(xì)介紹 snapshot 工具實(shí)現(xiàn)的原理,以及其在項(xiàng)目中的使用,需要的可以參考下2023-11-11
js實(shí)現(xiàn)瀑布流的一種簡單方法實(shí)例分享
現(xiàn)在說瀑布流式布局似乎有點(diǎn)晚了,但是每一項(xiàng)技術(shù)都是向著“精”和“簡”的方向在不斷發(fā)展,在發(fā)展到極致之前,需要一個(gè)相當(dāng)漫長的過程,因此,從這個(gè)角度來說,當(dāng)瀑布流被應(yīng)用得越來越多的時(shí)候,反而更應(yīng)該討論它,討論如何將它改善2013-11-11
利用JavaScript實(shí)現(xiàn)春節(jié)倒計(jì)時(shí)效果(移動端和PC端)
這篇文章主要介紹了通過Html+Css+js如何實(shí)現(xiàn)春節(jié)倒計(jì)時(shí)效果,本文同時(shí)介紹了移動端和PC端兩種效果,感興趣的同學(xué)可以跟隨小編一起動手試試2022-01-01

