原生JS實(shí)現(xiàn)pc端輪播圖效果
本文實(shí)例為大家分享了JS實(shí)現(xiàn)pc端輪播圖效果的具體代碼,供大家參考,具體內(nèi)容如下
案例:輪播圖需求
布局:ul下有很多l(xiāng)i標(biāo)簽;浮動(dòng)在一行;
原理:切換圖片的時(shí)候,把ul位置修改一下,給ul的父容器,設(shè)置一個(gè) overflow:hidden;
功能需求:
- 序號(hào)輪播
- 左右按鈕的輪播
- 自動(dòng)輪播
- 鼠標(biāo)在輪播圖里面的時(shí)候,停止自動(dòng)輪播,離開(kāi)后繼續(xù)自動(dòng)輪播
實(shí)現(xiàn)效果:

html部分
<div class="box" id="box">
<div class="inner" id="inner">
<ul id="imglist">
<li>
<a href="#" ><img src="images/1.jpg" alt=""></a>
</li>
<li>
<a href="#" ><img src="images/2.jpg" alt=""></a>
</li>
<li>
<a href="#" ><img src="images/3.jpg" alt=""></a>
</li>
<li>
<a href="#" ><img src="images/4.jpg" alt=""></a>
</li>
<li>
<a href="#" ><img src="images/5.jpg" alt=""></a>
</li>
<li>
<a href="#" ><img src="images/6.jpg" alt=""></a>
</li>
</ul>
<div class="list">
<i class="current">1</i>
<i>2</i>
<i>3</i>
<i>4</i>
<i>5</i>
<i>6</i>
</div>
<div class="arrow">
<span class="arrow-left"><</span>
<span class="arrow-right">></span>
</div>
</div>
</div>
css部分
* {
margin: 0;
padding: 0;
}
ul {
list-style: none;
}
.box {
width: 730px;
height: 454px;
padding: 8px;
border: 1px solid green;
margin: 100px auto;
}
.inner {
position: relative;
overflow: hidden;
height: 454px;
}
#imglist {
width: 700%;
position: absolute;
left: 0;
transition: left 300ms linear;
}
li {
float: left;
}
.list {
position: absolute;
bottom: 20px;
left: 50%;
margin-left: -85px;
}
.list i {
width: 20px;
height: 20px;
border-radius: 50%;
background-color: #fff;
color: #333;
float: left;
font-style: normal;
line-height: 20px;
font-size: 14px;
text-align: center;
margin-right: 10px;
cursor: pointer;
}
.list i:last-child {
margin-right: 0;
}
.list i.current {
background-color: skyblue;
color: #fff;
}
.arrow {
position: absolute;
width: 100%;
top: 50%;
margin-top: -30px;
}
.arrow-left,
.arrow-right {
width: 30px;
height: 60px;
position: absolute;
font: 20px/60px "consolas";
color: #fff;
background-color: rgba(0, 0, 0, .3);
text-align: center;
cursor: pointer;
}
.arrow-right {
right: 0;
}
js部分:
// 獲取DOM
var yuan = document.querySelectorAll("i");
var li = document.querySelector("ul li");
var ul = document.querySelector("ul");
var imgs = document.querySelector("#imglist");
var right = document.querySelector(".arrow-right");
var left = document.querySelector(".arrow-left");
var box = document.querySelector(".box");
window.onload = function() {
//------------------------------------這里是點(diǎn)擊小圓圈,控制圖片的切換
//循環(huán)小圓點(diǎn) 注冊(cè)小圓點(diǎn)
for (var i = 0; i < yuan.length; i++) {
//我們需要這里面的i 必須提前拿出來(lái),要不最后i的值就是最后一個(gè)數(shù)值了
yuan[i].num = i;
//注冊(cè)事件
yuan[i].onmouseover = function() {
// 現(xiàn)在要循環(huán)將樣式移除
for (var j = 0; j < yuan.length; j++) {
yuan[j].classList.remove("current");
}
//這里是為了將點(diǎn)擊的小圓點(diǎn) 增加上樣式
this.classList.add("current");
var num = this.num;
//到這里的思路就是點(diǎn)擊小圓點(diǎn) 將圖片進(jìn)行移動(dòng),向左面移動(dòng),上面css做了相應(yīng)的定位操作
//移動(dòng)的距離就是 n 乘以 一張圖片的寬度,
//n 就是選擇的小圓點(diǎn)的 坐標(biāo)-----i(num)
//圖片的寬度 box.offsetWidth
var left = num * li.offsetWidth;
// console.log(num, box.offsetWidth, left);
imgs.style.left = `-${left}px`;
//這里小原點(diǎn)聯(lián)動(dòng)左右按鈕
for (var p = 0; p < yuan.length; p++) {
//清除全部樣式(小圓點(diǎn))
yuan[p].classList.remove("current");
}
//給當(dāng)前的小圓點(diǎn)增加樣式
yuan[num].classList.add("current");
//這里這個(gè)位置比較關(guān)鍵,在上面設(shè)置完樣式之后,記得將此num賦值給全局的index
index = this.num;
}
}
//------------------------------------以上是點(diǎn)擊小圓圈,控制圖片的切換
//------------------------------------下面是開(kāi)始右面輪播,控制圖片的切換
//首先定義一個(gè)全局的index,這個(gè)index的作用依舊是控制圖片的切換
var index = 0;
right.onclick = function() {
index++;
//這里要對(duì)index做一下判斷,如果不做判斷,可以試想一下,
//只要你一點(diǎn)擊,index就會(huì)無(wú)限的增大,增大到你“無(wú)法自拔”
if (index == ul.children.length) {
//如果坐標(biāo)為6的話,顯示應(yīng)該顯示第1張圖片,所以要復(fù)位 即index=0
index = 0;
}
var left = index * li.offsetWidth;
// console.log(index, box.offsetWidth, left);
imgs.style.left = `-${left}px`;
//點(diǎn)擊右面增加聯(lián)動(dòng)小圓點(diǎn)的效果
for (var n = 0; n < yuan.length; n++) {
//清除全部樣式(小圓點(diǎn))
yuan[n].classList.remove("current");
}
//給當(dāng)前的小圓點(diǎn)增加樣式
yuan[index].classList.add("current");
};
//------------------------------------以上是結(jié)束右面輪播,控制圖片的切換
//------------------------------------下面是開(kāi)始左面輪播,控制圖片的切換
left.onclick = function() {
index--;
//這里同右點(diǎn)擊一樣,需要做一下判斷,
console.log(index);
if (index == -1) {
index = ul.children.length - 1;
}
var left = index * li.offsetWidth;
// console.log(index, box.offsetWidth, left);
// console.log(left);
imgs.style.left = `-${left}px`;
//這個(gè)位置做的是 左面點(diǎn)擊聯(lián)動(dòng)小圓點(diǎn)
for (var m = 0; m < yuan.length; m++) {
//清除全部樣式(小圓點(diǎn))
yuan[m].classList.remove("current");
}
//給當(dāng)前的小圓點(diǎn)增加樣式
yuan[index].classList.add("current");
};
//------------------------------------上面是結(jié)束左面輪播,控制圖片的切換
//------------------------------------開(kāi)始設(shè)置自動(dòng)輪播
var timer = setInterval(function() {
right.onclick();
}, 1000);
//------------------------------------以上是自動(dòng)輪播結(jié)束
//------------------------------------設(shè)置鼠標(biāo)進(jìn)來(lái)就停止開(kāi)始
box.onmouseover = function() {
clearInterval(timer);
};
//------------------------------------設(shè)置鼠標(biāo)進(jìn)來(lái)就停止結(jié)束
//------------------------------------設(shè)置鼠標(biāo)出去就停止開(kāi)始
box.onmouseout = function() {
timer = setInterval(function() {
right.onclick();
}, 1000);
};
//------------------------------------設(shè)置鼠標(biāo)出去就停止結(jié)束
}
未完待續(xù),本篇文章做的PC端的處理,目前從6頁(yè)-1頁(yè),1頁(yè)到6頁(yè)還有點(diǎn)小瑕疵,會(huì)及時(shí)更新上的,其他功能一切正常,歡迎大家評(píng)論
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)輪播圖的完整代碼
- 原生js實(shí)現(xiàn)輪播圖的示例代碼
- js實(shí)現(xiàn)支持手機(jī)滑動(dòng)切換的輪播圖片效果實(shí)例
- js實(shí)現(xiàn)點(diǎn)擊左右按鈕輪播圖片效果實(shí)例
- JS輪播圖實(shí)現(xiàn)簡(jiǎn)單代碼
- JS實(shí)現(xiàn)左右無(wú)縫輪播圖代碼
- JS實(shí)現(xiàn)自動(dòng)輪播圖效果(自適應(yīng)屏幕寬度+手機(jī)觸屏滑動(dòng))
- 原生js實(shí)現(xiàn)無(wú)限循環(huán)輪播圖效果
- 使用html+js+css 實(shí)現(xiàn)頁(yè)面輪播圖效果(實(shí)例講解)
- 基于vue.js輪播組件vue-awesome-swiper實(shí)現(xiàn)輪播圖
相關(guān)文章
JavaScript中數(shù)據(jù)結(jié)構(gòu)與算法(五):經(jīng)典KMP算法
這篇文章主要介紹了JavaScript中數(shù)據(jù)結(jié)構(gòu)與算法(五):經(jīng)典KMP算法,本文詳解了KMP算法的方方面在,需要的朋友可以參考下2015-06-06
微信小程序語(yǔ)音同步智能識(shí)別的實(shí)現(xiàn)案例代碼解析
在一些小程序的開(kāi)發(fā)場(chǎng)景中經(jīng)常會(huì)有語(yǔ)音轉(zhuǎn)文字的需求,今天小編通過(guò)實(shí)際案例給大家分享微信小程序語(yǔ)音同步智能識(shí)別功能,需要的朋友可以參考下2020-05-05
javascript 網(wǎng)頁(yè)跳轉(zhuǎn)的方法
昨天練習(xí)的時(shí)候正好要用到跳轉(zhuǎn)代碼,在網(wǎng)上找了一下,覺(jué)得下面幾個(gè)不錯(cuò)...整理了一下發(fā)上來(lái)...2008-12-12
JavaScript仿京東實(shí)現(xiàn)秒殺倒計(jì)時(shí)案例詳解
這篇文章主要為大家詳細(xì)介紹了如何利用JavaScript實(shí)現(xiàn)京東秒殺倒計(jì)時(shí)效果,文中示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下2022-03-03
yolov5項(xiàng)目部署+微信小程序前端展示的全過(guò)程
YOLOV5模型從發(fā)布到現(xiàn)在都是炙手可熱的目標(biāo)檢測(cè)模型,被廣泛運(yùn)用于各大場(chǎng)景之中,下面這篇文章主要給大家介紹了關(guān)于yolov5項(xiàng)目部署+微信小程序前端展示的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11
JavaScript設(shè)計(jì)模式中的橋接和中介者模式
這篇文章主要介紹了JavaScript設(shè)計(jì)模式中的橋接和中介者模式,橋接設(shè)計(jì)模式是一種偏向于組合的設(shè)計(jì)模式,而非繼承的設(shè)計(jì)模式,實(shí)現(xiàn)的細(xì)節(jié)從一個(gè)模塊推送給另一個(gè)具有單獨(dú)模塊的對(duì)象,而中介者設(shè)計(jì)模式是指通過(guò)一個(gè)中介者對(duì)象封裝一系列的對(duì)象交互2022-06-06
100多個(gè)基礎(chǔ)常用JS函數(shù)和語(yǔ)法集合大全
本文將介紹100多個(gè)基礎(chǔ)常用JS函數(shù)和語(yǔ)法,具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-02-02
bootstrap3-dialog-master模態(tài)框使用詳解
這篇文章主要為大家詳細(xì)介紹了bootstrap3-dialog-master模態(tài)框的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08
圖形編輯器中JS實(shí)現(xiàn)防誤操作之拖拽阻塞
這篇文章主要為大家介紹了圖形編輯器中JS實(shí)現(xiàn)防誤操作之拖拽阻塞實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-03-03

