JavaScript滾動(dòng)輪播圖制作原理詳解
本文實(shí)例為大家分享了JavaScript滾動(dòng)輪播圖制作原理,供大家參考,具體內(nèi)容如下
滾動(dòng)輪播圖
滾動(dòng)輪播圖布局關(guān)鍵:是所有圖片并排在一起,所以u(píng)nit的寬要足夠?qū)挕?br />克隆第一張圖片追加到最后一張
右按鈕拉動(dòng)策略:先拉動(dòng),再瞬移
左按鈕拉動(dòng)策略:先瞬移,再拉動(dòng)
與呼吸輪播圖一樣,需要做防流氓策略
復(fù)制代碼:將我代碼中的圖片更換為你的圖片,注意圖片路徑,還需要引入js庫,我引入的是jquery-1.12.3.min.js的版本,引入的時(shí)候注意路徑
舉例:
<!DOCTYPE html> <html lang="en"> <head> ?? ?<meta charset="UTF-8"> ?? ?<title>Document</title> ?? ?<style type="text/css"> ?? ??? ?* { ?? ??? ??? ?margin: 0; ?? ??? ??? ?padding: 0; ?? ??? ?} ?? ??? ?ul, ol { ?? ??? ??? ?list-style: none; ?? ??? ?} ?? ??? ?a { ?? ??? ??? ?text-decoration: none; ?? ??? ?} ?? ??? ?.carousel { ?? ??? ??? ?width: 560px; ?? ??? ??? ?height: 300px; ?? ??? ??? ?margin: 50px auto; ?? ??? ??? ?border: 5px solid red; ?? ??? ??? ?position: relative; ?? ??? ??? ?overflow: hidden; ?? ??? ?} ?? ??? ?/* 滾動(dòng)輪播圖布局關(guān)鍵,是所有圖片并排在一起 ?? ??? ??? ?unit的寬要足夠?qū)? ?? ??? ? */ ?? ??? ? .carousel .unit { ?? ??? ? ?? ?position: absolute; ?? ??? ? ?? ?width: 9999px; ?? ??? ? ?? ?left: 0; ?? ??? ? ?? ?top: 0; ?? ??? ? } ?? ??? ? .carousel .unit li { ?? ??? ? ?? ?float: left; ?? ??? ? ?? ?width: 560px; ?? ??? ? ?? ?height: 300px; ?? ??? ? } ?? ??? ? .btns a { ?? ??? ? ?? ?position: absolute; ?? ??? ? ?? ?width: 30px; ?? ??? ? ?? ?height: 60px; ?? ??? ? ?? ?top: 50%; ?? ??? ? ?? ?margin-top: -30px; ?? ??? ? ?? ?background-color: rgba(0, 0, 0, .5); ?? ??? ? ?? ?color: #fff; ?? ??? ? ?? ?font-size: 20px; ?? ??? ? ?? ?line-height: 60px; ?? ??? ? ?? ?text-align: center; ?? ??? ? } ?? ??? ? .btns a:first-child { ?? ??? ? ?? ?left: 10px; ?? ??? ? } ?? ??? ? .btns a:last-child { ?? ??? ? ?? ?right: 10px; ?? ??? ? } ?? ??? ? .circles { ?? ??? ? ?? ?position: absolute; ?? ??? ? ?? ?width: 140px; ?? ??? ? ?? ?height: 20px; ?? ??? ? ?? ?left: 50%; ?? ??? ? ?? ?margin-left: -70px; ?? ??? ? ?? ?bottom: 30px; ?? ??? ? } ?? ??? ? .circles ol { ?? ??? ? ?? ?width: 150px; ?? ??? ? } ?? ??? ? .circles ol li { ?? ??? ? ?? ?float: left; ?? ??? ? ?? ?width: 20px; ?? ??? ? ?? ?height: 20px; ?? ??? ? ?? ?margin-right: 10px; ?? ??? ? ?? ?background-color: orange; ?? ??? ? ?? ?border-radius: 50%; ?? ??? ? } ?? ??? ? .circles ol li.cur { ?? ??? ? ?? ?background-color: yellow; ?? ??? ? } ?? ?</style> </head> <body> ?? ?<div class="carousel" id="carousel"> ?? ??? ?<ul class="unit" id="unit"> ?? ??? ??? ?<li><img src="images/0.jpg" alt=""></li> ?? ??? ??? ?<li><img src="images/1.jpg" alt=""></li> ?? ??? ??? ?<li><img src="images/2.jpg" alt=""></li> ?? ??? ??? ?<li><img src="images/3.jpg" alt=""></li> ?? ??? ??? ?<li><img src="images/4.jpg" alt=""></li> ?? ??? ?</ul> ?? ??? ?<div class="btns"> ?? ??? ??? ?<a href="javascript:void(0)" id="leftBtn"><</a> ?? ??? ??? ?<a href="javascript:void(0)" id="rightBtn">></a> ?? ??? ?</div> ?? ??? ?<div class="circles" id="circles"> ?? ??? ??? ?<ol> ?? ??? ??? ??? ?<li class="cur"></li> ?? ??? ??? ??? ?<li></li> ?? ??? ??? ??? ?<li></li> ?? ??? ??? ??? ?<li></li> ?? ??? ??? ??? ?<li></li> ?? ??? ??? ?</ol> ?? ??? ?</div> ?? ?</div> ?? ?<script type="text/javascript" src="js/jquery-1.12.3.min.js"></script> ?? ?<script type="text/javascript"> ?? ?// 獲取元素 ?? ?var $unit = $("#unit"); ?? ?var $leftBtn = $("#leftBtn"); ?? ?var $rightBtn = $("#rightBtn"); ?? ?var $circles = $("#circles ol li"); ?? ?var length = $circles.length; ?? ?// console.log(length); ?? ?// 定義信號(hào)量 有效范圍: 0, 1, 2, 3, 4 ?? ?var idx = 0; ?? ?// 克隆第一張圖片追加到最后一張 ?? ?$unit.children("li:first").clone().appendTo($unit); ?? ?// 右按鈕的點(diǎn)擊事件 ?? ?$rightBtn.click(function() { ?? ??? ?// 防流氓 ?? ??? ?if ($unit.is(":animated")) { ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?// 拉動(dòng)策略: 先拉動(dòng), 再瞬移 ?? ??? ?idx++; ?? ??? ?console.log(idx); ?? ??? ?// 信號(hào)量 有效值是: 0, 1, 2, 3, 4, 5(5是貓膩圖) ?? ??? ?$unit.animate({"left": -560 * idx}, 1000, function() { ?? ??? ??? ?// 當(dāng)貓膩圖完全顯示之后驗(yàn)證信號(hào)量 ?? ??? ??? ?if (idx > length - 1) { ?? ??? ??? ??? ?// idx 歸零 ?? ??? ??? ??? ?idx = 0; ?? ??? ??? ??? ?// 瞬間移動(dòng)到真圖 ?? ??? ??? ??? ?$unit.css("left", 0); ?? ??? ??? ?} ?? ??? ?}) ?? ??? ?// 小圓點(diǎn)在1000ms之內(nèi),對(duì)應(yīng)的是idx = 5 是貓膩圖 ?? ??? ?// 0 - 4 是有效值, 5對(duì)應(yīng)的是貓膩圖 ?? ??? ?// 定義一個(gè)變量用于中轉(zhuǎn)信號(hào)量 ?? ??? ?var i = idx <= 4 ? idx : 0; ?? ??? ?$circles.eq(i).addClass("cur").siblings().removeClass("cur"); ?? ?}) ?? ?// 左按鈕點(diǎn)擊事件 ?? ?$leftBtn.click(function() { ?? ??? ?// 防流氓 ?? ??? ?if ($unit.is(":animated")) { ?? ??? ??? ?return; ?? ??? ?} ?? ??? ?// 左按鈕的拉動(dòng)策略: 先瞬移, 再拉動(dòng) ?? ??? ?idx--; ?? ??? ?// 邊界判斷 ?? ??? ?if (idx < 0) { ?? ??? ??? ?idx = length - 1; ?? ??? ??? ?// 瞬間移動(dòng)到貓膩圖 ?? ??? ??? ?$unit.css("left", -560 * length); ?? ??? ?} ?? ??? ?console.log(idx); ?? ??? ?// 拉動(dòng) ?? ??? ?$unit.animate({"left": -560 * idx}, 1000); ?? ??? ?// 當(dāng)前小圓點(diǎn)加cur ?? ??? ?$circles.eq(idx).addClass("cur").siblings().removeClass("cur"); ?? ?}) ?? ?// 小圓點(diǎn)事件 ?? ?$circles.mouseenter(function() { ?? ??? ?// 改變信號(hào)量 ?? ??? ?idx = $(this).index(); ?? ??? ?console.log(idx); ?? ??? ?// 拉動(dòng) ?? ??? ?$unit.stop(true).animate({"left": -560 * idx}, 600); ?? ??? ?// 小圓點(diǎn)加cur ?? ??? ?$(this).addClass("cur").siblings().removeClass("cur"); ?? ?}) ?? ?</script> </body> </html>
以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Vuejs中使用markdown服務(wù)器端渲染的示例
- JS加載解析Markdown文檔過程詳解
- js正則匹配markdown里的圖片標(biāo)簽的實(shí)現(xiàn)
- JavaScript+Node.js寫一款markdown解析器
- JavaScript實(shí)現(xiàn)頁面無縫滾動(dòng)效果
- js實(shí)現(xiàn)文字滾動(dòng)的效果
- js實(shí)現(xiàn)列表循環(huán)滾動(dòng)
- js實(shí)現(xiàn)列表自動(dòng)滾動(dòng)循環(huán)播放
- JavaScript markdown 編輯器實(shí)現(xiàn)雙屏同步滾動(dòng)
相關(guān)文章
前端uniapp封裝網(wǎng)絡(luò)請(qǐng)求以及實(shí)際應(yīng)用教程
這篇文章主要給大家介紹了關(guān)于前端uniapp封裝網(wǎng)絡(luò)請(qǐng)求以及實(shí)際應(yīng)用的相關(guān)資料,在uniapp中進(jìn)行網(wǎng)絡(luò)測(cè)試請(qǐng)求可以通過封裝網(wǎng)絡(luò)請(qǐng)求來實(shí)現(xiàn),文中給出了詳細(xì)的代碼實(shí)例,需要的朋友可以參考下2024-01-01使用SyntaxHighlighter實(shí)現(xiàn)HTML高亮顯示代碼的方法
syntaxhighlighter是一個(gè)小開源項(xiàng)目,它可以在網(wǎng)頁中對(duì)各種程序源代碼語法進(jìn)行加亮顯示。2010-02-02javascript實(shí)現(xiàn)Table間隔色以及選擇高亮(和動(dòng)態(tài)切換數(shù)據(jù))的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)Table間隔色以及選擇高亮(和動(dòng)態(tài)切換數(shù)據(jù))的方法,涉及javascript表格操作及按鈕實(shí)現(xiàn)表格切換的技巧,需要的朋友可以參考下2015-05-05手動(dòng)實(shí)現(xiàn)js短信驗(yàn)證碼輸入框
本文記錄一下自己手動(dòng)實(shí)現(xiàn)的一個(gè)前端常見的短信驗(yàn)證碼輸入組件,從需求到實(shí)現(xiàn)逐步優(yōu)化的過程。具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06詳解JavaScript 浮點(diǎn)數(shù)運(yùn)算的精度問題
這篇文章主要介紹了詳解JavaScript 浮點(diǎn)數(shù)運(yùn)算的精度問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-07-07