JS輪播圖的實(shí)現(xiàn)方法
本文實(shí)例為大家分享了JS輪播圖的實(shí)現(xiàn)代碼,供大家參考,具體內(nèi)容如下
需求:
自動(dòng)輪播,鼠標(biāo)移入輪播停止、移出繼續(xù),小圓點(diǎn)點(diǎn)擊切圖,左右箭頭切圖
效果圖:

思路
通過(guò)編寫過(guò)渡動(dòng)畫實(shí)現(xiàn)輪播效果,圖片的出現(xiàn)動(dòng)畫以及移出動(dòng)畫。顯示區(qū)的圖片移出,切換的圖進(jìn)入分別調(diào)用動(dòng)畫,程序關(guān)鍵點(diǎn):哪張圖應(yīng)該進(jìn)入,哪張圖應(yīng)該移出。
輪播分為三部分:
自動(dòng)輪播,左右箭頭翻圖,底部小圓點(diǎn)點(diǎn)擊翻圖。
編寫程序順序:
1. 小圓點(diǎn)點(diǎn)擊
為什么先做小圓點(diǎn)呢?做小圓點(diǎn)點(diǎn)擊功能時(shí),我們能夠清晰的知道哪張圖片應(yīng)該切換過(guò)來(lái),哪張圖片應(yīng)該移開。例如,顯示區(qū)是第一張圖時(shí),點(diǎn)擊第二個(gè)原點(diǎn),那么當(dāng)前的第一張圖應(yīng)該移開,第二圖應(yīng)該進(jìn)入。
2.左右箭頭切換
這部分功能,我們可以這種思路,當(dāng)點(diǎn)擊左箭頭時(shí),相當(dāng)于我們按順序點(diǎn)擊1、2、3號(hào)小圓點(diǎn),只是顯示區(qū)為3號(hào)圖時(shí),我們需要將下一張?jiān)O(shè)置為1號(hào)圖。所以加一個(gè)判斷條件即可,當(dāng)計(jì)數(shù)器為3時(shí),重置為1;右邊箭頭相反即可 順序變?yōu)?、2、1,當(dāng)當(dāng)計(jì)數(shù)器為1時(shí),重置為3。
3.自動(dòng)輪播
這功能就相當(dāng)于在一定的時(shí)間間隔內(nèi),點(diǎn)擊右邊箭頭或者左邊箭頭。
HTML部分:
<div id="banner"> <div class="w"> <!-- 左右箭頭--> <span class="iconfont icon-zuojiantou" onclick="arrow_left()"></span> <span class="iconfont icon-youjiantou" onclick="arrow_right()"></span> <!-- 輪播圖--> <ul> <li><img src="img/1.jpg" alt=""></li> <li style="left: 1000px"><img src="img/2.jpg" alt="" ></li> <li style="left: 1000px"><img src="img/3.jpg" alt="" ></li> </ul> <!-- /小圓點(diǎn)--> <ol id="circleContainer"> <li onclick="move(0)"></li> <li onclick="move(1)"></li> <li onclick="move(2)"></li> </ol> </div> </div>
CSS部分:
<style>
*{
margin: 0;
padding: 0;
list-style: none;
}
.w {
width: 1000px;
height: 600px;
margin: 100px auto 0;
position: relative;
overflow: hidden;
}
ul {
height: 600px;
}
@keyframes leftCome {
from {
left: -100%;
}
to {
left: 0;
}
}
@keyframes leftOut {
from {
left: 0;
}
to {
left: 100%;
}
}
@keyframes rightCome {
from {
left: 100%;
}
to {
left: 0;
}
}
@keyframes rightOut {
from {
left: 0;
}
to {
left: -100%;
}
}
ul li {
position: absolute;
width: 1000px;
}
ul li img {
width: 100%;
height: 600px;
}
.iconfont {
color: white;
position: absolute;
font-size: 30px;
top: calc(50% - 15px);
background-color: rgba(216, 216, 216, 0.23);
cursor: pointer;
opacity: 0;
transition: opacity .3s linear;
z-index: 999;
}
.iconfont:hover {
color: palegreen;
}
.icon-zuojiantou {
left: 0;
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
}
.icon-youjiantou {
right: 0;
border-top-left-radius: 50%;
border-bottom-left-radius: 50%;
}
#circleContainer {
position: absolute;
bottom: 10px;
left: calc(50% - 30px);
}
#circleContainer li {
display: inline-block;
width: 20px;
height: 20px;
border-radius: 50%;
background-color: white;
margin-right: 5px;
}
#circleContainer .change {
background-color: palegreen;
box-shadow: 0 0 10px #7dd07d;
}
</style>
JS部分:
<script>
let timer ;
window.onload = function(){
timer = setInterval(function () {
arrow_left();
},3000)
};
let arrow = document.querySelectorAll(".iconfont");
let w = document.querySelector(".w");
let circle = document.querySelectorAll("ol li");
w.addEventListener("mouseenter",function () {
clearInterval(timer);
arrow[0].style.opacity = "1";
arrow[1].style.opacity = "1";
});
w.addEventListener("mouseleave",function () {
arrow[0].style.opacity = "0";
arrow[1].style.opacity = "0";
timer = setInterval(function () {
arrow_left();
},3000)
});
circle[0].className = "change";
let location_i = 0;
let li = document.querySelectorAll("ul li");
// 移動(dòng)函數(shù)
function move(i,direcTion_) {
if (direcTion_ === "right") {
if (location_i !== i) {
li[i].style.animation = "rightCome .5s ease forwards";
li[location_i].style.animation = "rightOut .5s ease forwards";
location_i = i;
num = i;
}
} else {
if (location_i !== i) {
li[i].style.animation = "leftCome .5s ease forwards";
li[location_i].style.animation = "leftOut .5s ease forwards";
location_i = i;
num = i;
}
}
for (let i = 0 ; i<circle.length ;i++){
circle[i].className = "";
}
circle[location_i].className = "change";
}
// 右箭頭
let flag = true;
let num = 0;
function arrow_right() {
flag = false ;
num === 2 ? num = 0 : num = location_i + 1;
move(num);
}
// 左箭頭
function arrow_left() {
num === 0 ? num = 2 : num = location_i - 1;
move(num,"right");
}
</script>
精彩專題分享:jQuery圖片輪播 JavaScript圖片輪播 Bootstrap圖片輪播
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Nest.js快速啟動(dòng)API項(xiàng)目過(guò)程詳解
這篇文章主要為大家介紹了Nest.js快速啟動(dòng)API項(xiàng)目過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
javascript DOM實(shí)用學(xué)習(xí)資料
比較詳細(xì)的實(shí)例分析了dom的一些常用方法2008-09-09
JavaScript 動(dòng)態(tài)生成方法的例子
動(dòng)態(tài)生成方法的例子,這些方法在新對(duì)象實(shí)例化的時(shí)候創(chuàng)建2009-07-07
微信小程序第三方框架對(duì)比 之 wepy / mpvue / taro
這篇文章主要介紹了小程序第三方框架對(duì)比 ( wepy / mpvue / taro ) 分析,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2019-04-04
前端js?sm2實(shí)現(xiàn)加密簡(jiǎn)單代碼舉例
在Vue項(xiàng)目中實(shí)現(xiàn)數(shù)據(jù)加密,首先需要安裝SM2加密庫(kù),如js-sm2或sm-crypto,通過(guò)npm或yarn進(jìn)行安裝后,在Vue組件或文件中引入該庫(kù),并使用其提供的加密、解密功能,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-09-09
JAVASCRIPT 客戶端驗(yàn)證數(shù)據(jù)的合法性代碼(正則)
JAVASCRIPT 客戶端驗(yàn)證數(shù)據(jù)的合法性代碼,比較全了,所以簡(jiǎn)單分頁(yè)了下,喜歡的朋友可以收藏下。2010-04-04
JavaScript 禁止用戶保存圖片的實(shí)現(xiàn)代碼
這篇文章主要介紹了JavaScript 禁止用戶保存圖片的實(shí)現(xiàn)代碼,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04

