JS實(shí)現(xiàn)多重選項(xiàng)卡切換輪播圖
輪播動(dòng)畫來提升頁面的顏值和交互性能,下面我們將一起學(xué)習(xí)利用html , css和Javascript等前端開發(fā)基礎(chǔ)知識(shí)來制作一個(gè)簡(jiǎn)單的輪播圖。
輪播圖簡(jiǎn)介:在一個(gè)網(wǎng)站的某一特定模塊,通過電腦上鼠標(biāo)點(diǎn)擊或鼠標(biāo)移入、手機(jī)上手指滑動(dòng)后,可以分別展示不同的圖片,這個(gè)模塊就叫做輪播模塊。
(做的不好的地方歡迎各位大佬批評(píng)指正,感覺有幫助的同學(xué)麻煩給顆星星哦~)
html布局部分:
<div id="box"> <div class="scenery pic"> <img class="show" src="imgs/s2.jpg" alt="scenery"> <img src="imgs/s3.jpg" alt="scenery"> <img src="imgs/s1.jpg" alt="scenery"> <img src="imgs/s5.jpg" alt="scenery"> <img src="imgs/s4.jpg" alt="scenery"> </div> <div class="car pic"> <img src="imgs/animal4.jpg" alt="animal"> <img src="imgs/animal3.jpg" alt="animal"> <img src="imgs/animal2.jpg" alt="animal"> <img src="imgs/animal1.jpg" alt="animal"> </div> <div class="entertainment pic"> <img src="imgs/entertainment1.jpg" alt="entertainment"> <img src="imgs/entertainment2.jpg" alt="entertainment"> <img src="imgs/entertainment3.jpg" alt="entertainment"> <img src="imgs/entertainment4.jpg" alt="entertainment"> <img src="imgs/entertainment5.jpg" alt="entertainment"> </div> <div class="leftbar"> <div class="checked">風(fēng)景</div> <div>名車</div> <div>娛樂</div> </div> <div class="bottombar"> </div> </div>
CSS樣式部分:
/* 為了布局方便,容器里大多采用的flex */ #box { position: relative; width: 460px; height: 300px; margin: 40px auto; border: 1px solid rgb(109, 98, 98); user-select: none; } /* 側(cè)邊欄布局 */ .leftbar { display: flex; flex-direction: column; justify-content: space-between; position: absolute; top: -1px; left: -80px; width: 80px; height: 100%; text-align: center; font-size: 20px; cursor: pointer; } .leftbar div { flex: 1; line-height: 100px; background-color: cadetblue; letter-spacing: 5px; } .leftbar div:nth-child(2) { border-top: 1px solid #fff; border-bottom: 1px solid #fff; } /* 底部切換按鈕樣式設(shè)計(jì) */ .bottombar { display: flex; justify-content: space-between; position: absolute; bottom: -1px; right: -1px; z-index: 10; width: 200px; height: 30px; cursor: pointer; } .bottombar div { flex: 1; line-height: 30px; background-color: rgb(232, 233, 235, .5); text-align: center; font-weight: 700; } .bottombar div~div { border-left: 1px solid grey; } img { position: absolute; display: block; width: 460px; height: 300px; } .show { z-index: 5; } .leftbar .checked, .bottombar .checked { background-color: rgb(241, 5, 5); }
javascript邏輯實(shí)現(xiàn)部分:
var Box = document.querySelector('#box'), pic = Box.querySelectorAll('.pic'), Idx = 0, index = 0, timer = null, ltDiv = Box.querySelector('.leftbar'), btDiv = Box.querySelector('.bottombar'), Img = Box.querySelectorAll('img'); function createBtBar(len) {//動(dòng)態(tài)創(chuàng)建底部切換按鈕 var str = ''; for (var i = 0; i < len; i++) { str += `<div>${i + 1}</div>`; } btDiv.innerHTML = str; btDiv.children[0].classList.add('checked'); } function initialize() {//頁面初始狀態(tài) createBtBar(pic[0].children.length); } initialize(); function clearZindex() {//重置所有圖片的定位層級(jí) for (var k = 0; k < Img.length; k++) { Img[k].classList.remove('show'); } } ltDiv.addEventListener('click', (e) => {//側(cè)邊欄項(xiàng)目切換 if (e.target.tagName.toLowerCase() === 'div') { for (var j = 0; j < ltDiv.children.length; j++) { ltDiv.children[j].classList.remove('checked'); } clearZindex(); Idx = 0; index = getEleIdx(e.target); ltDiv.children[index].classList.add('checked'); pic[index].children[0].classList.add('show'); createBtBar(pic[index].children.length); } }); btDiv.addEventListener('click', (e) => {//委托監(jiān)聽底部切換按鈕 if (e.target.tagName.toLowerCase() === 'div') { function changePic(callback) { btDiv.children[Idx].classList.remove('checked'); clearZindex(); callback && callback(); btDiv.children[Idx].classList.add('checked'); pic[index].children[Idx].classList.add('show'); } changePic(function () { Idx = getEleIdx(e.target); }); } }); function getEleIdx(item) {//獲取DOM元素下標(biāo) var elements = item.parentNode.children; for (var i = 0, len = elements.length; i < len; i++) { if (item === elements[i]) { return i; } } } function loopShow() {//循環(huán)自動(dòng)展示 clearInterval(timer); timer = setInterval(function () { pic[index].children[Idx].classList.remove('show'); btDiv.children[Idx].classList.remove('checked'); Idx += 1; if (Idx < 0 || Idx > pic[index].children.length - 1) { Idx = 0; } pic[index].children[Idx].classList.add('show'); btDiv.children[Idx].classList.add('checked'); }, 1000); } loopShow(); Box.addEventListener('mouseover', function () { clearInterval(timer);//鼠標(biāo)移入展示區(qū)停止輪播 }); Box.addEventListener('mouseout', function () { loopShow();//鼠標(biāo)移出展示區(qū)自動(dòng)輪播 });
具體實(shí)現(xiàn)的展示效果入下:
(Tip: 各位注意自行準(zhǔn)備圖片放到自己的文件夾里哦~)
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js實(shí)現(xiàn)支持手機(jī)滑動(dòng)切換的輪播圖片效果實(shí)例
- js圖片輪播手動(dòng)切換效果
- vue.js+elementUI實(shí)現(xiàn)點(diǎn)擊左右箭頭切換頭像功能(類似輪播圖效果)
- 原生js實(shí)現(xiàn)圖片層疊輪播切換效果
- javascript實(shí)現(xiàn)圖片自動(dòng)和可控的輪播切換特效
- Bootstrap 最常用的JS插件系列總結(jié)(圖片輪播、標(biāo)簽切換等)
- js實(shí)現(xiàn)圖片輪播切換效果
- js實(shí)現(xiàn)點(diǎn)擊切換和自動(dòng)播放的輪播圖
- js實(shí)現(xiàn)輪播圖自動(dòng)切換
- 原生javascript實(shí)現(xiàn)圖片輪播切換效果
相關(guān)文章
jfinal與bootstrap的登出實(shí)戰(zhàn)詳解
這篇文章主要為大家詳細(xì)介紹了jfinal與bootstrap的登出實(shí)戰(zhàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-11-11BootStrap給table表格的每一行添加一個(gè)按鈕事件
這篇文章主要介紹了BootStrap給table表格的每一行添加一個(gè)按鈕事件的相關(guān)資料,需要的朋友可以參考下2017-09-09常用的js驗(yàn)證和數(shù)據(jù)處理總結(jié)
遇到需要對(duì)數(shù)據(jù)及表單驗(yàn)證的,我相信大家都像我一樣,喜歡在網(wǎng)上找相關(guān)的方法,因?yàn)樽约簩懙脑?,是比較耗時(shí)的。今天就給大家分享一下,自己在工作中總結(jié)的一些常用的js。2016-08-08基于JS實(shí)現(xiàn)二維碼圖片固定在右下角某處并跟隨滾動(dòng)條滾動(dòng)
這篇文章主要介紹了基于JS實(shí)現(xiàn)二維碼圖片固定在右下角某處并跟隨滾動(dòng)條滾動(dòng),代碼簡(jiǎn)單易懂非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-02-02JavaScript第七種數(shù)據(jù)類型Symbol的用法詳解
Symbol是ES6中引入的一種新的基本數(shù)據(jù)類型,用于表示一個(gè)獨(dú)一無二的值。它是JavaScript中的第七種數(shù)據(jù)類型。本文將詳細(xì)講講Symbol的使用,需要的可以參考一下2022-09-09js通過var定義全局變量與在window對(duì)象上直接定義屬性的區(qū)別說明
這篇文章主要介紹了js通過var定義全局變量與在window對(duì)象上直接定義屬性的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09