日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

JavaScript Dom實現輪播圖原理和實例

瀏覽:32日期:2023-06-08 13:28:54

想要制作一個輪播圖我們要先弄清楚他的原理,如何能讓圖片自右向左滑動?讓我們想一想生活中有沒有類似的東西,比如電影膠片。我們可以創建一個塊作為投影區,創建一個列表作為底片并使其向左移動,達到輪播圖效果。

JavaScript Dom實現輪播圖原理和實例

創建一個塊和列表

創建一個塊作為總的容器和顯示區域。

<div id='out'> <ul id='imgList'> <li><img src='http://www.b3g6.com/bcjs/pto/many.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/hello.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/timg.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/zhenjing.jpg'></li> </ul></div>

現在圖片豎著堆在一列,塊也不知道在哪里,那添加一點樣式

開啟定位并令其居中,并且讓塊大一點并添加背景好確定位置(本實驗圖片統一寬高比500*431,所以div寬高比520*451)

去掉列表默認樣式讓列表橫著顯示

*{ margin: 0; padding: 0; } #out{ width:520px; height:451px ; background-color: #00bcd4; position: relative; margin: 50px auto; /*overflow: hidden;*/ /*剪掉我們不需要的部分,為了方便調試注掉了*/ } #imgList{ list-style: none; position: absolute; /* left: -520px; */ } #imgList li{ float:left; margin: 10px;}

在嘗試浮動后圖片依舊是一列,是因為lu的寬度太小放不下,所以我們要擴大,但是我們不能直接決定他的寬度因為隨著圖片的增加,寬度應不斷變大,于是我們用JavaScript來解決寬度每增加一張圖片擴大520px寬度

window.onload=function () { // 動態的ul長度 var imgList = document.getElementById('imgList'); var imgArr = document.getElementsByTagName('img'); imgList.style.width=520*imgArr.length+'px'; }//onload

現在,裝載圖片的膠片ul每向左偏移-520px就會更換一個圖片

導航欄

輪播圖會定時更換,但是有可能你的客戶剛剛被吸引就已經更換圖片了,如果你想讓你的客戶干巴巴的瞪著圖片回來,你很可能失去她。所以一個完整的輪播圖還需要一個能手動切換前后的按鈕或一個導航條。我們這里用幾個超鏈接完成任務

<div id='navDiv'> <a href='javascript:;'></a> <a href='javascript:;'></a> <a href='javascript:;'></a> <a href='javascript:;'></a></div>

ul在開啟絕對定位后脫離文檔流,現在我們的導航因為沒有內容縮成一團擠在左上角我們要讓每一個超聯接彼此分開,手動撐開空間,調整到靠下的位置,下方正中或靠右是比較好的選擇.調整透明度降低導航對于人的吸引力,畢竟圖片才是主題。而位置的調整為了便于擴充我們還是要用js來解決。

} #navDiv{ position: absolute; bottom: 15px; } #navDiv a{ float: left; width: 15px; height: 15px; background-color: #89ff00; margin: 0 5px; opacity: 0.5; }

//動態導航居中 var navDiv = document.getElementById('navDiv'); var out = document.getElementById('out'); //將縱向剩余距離分到導航左右達到居中效果 //不除以二就會變成右對齊 //不要忘了單位,嗯。。可能只有我會忘吧 navDiv.style.left = (out.clientWidth - navDiv.clientWidth)/2+'px';導航功能完善

一僅僅個15px大的方塊要給用戶怎樣的反饋?當前圖片所處位置,當鼠標移動到導航是時要反饋信息告訴用戶我是可以點擊的,點擊導航能切換圖片。

#navDiv a:hover{ background-color: red; /* 鼠標移入效果*/ /* 內聯樣式的優先級很高注意不要被覆蓋失效*/ }

//定位效果var allA = document.getElementsByTagName('a');var index = 0; allA[index].style.backgroundColor='black'; //點擊導航效果 //使用塊級作用域let,不然i會是同一個數 for(let i=0;i<allA.length;i++){ allA[i].onclick=function () { imgList.style.left=-520*i+'px'; //清除內聯樣式,使得css文件能生效 allA[index].style.backgroundColor=''; index=i; allA[index].style.backgroundColor='black'; } }動畫效果

為什么要做動畫? (因為很酷(?ω?*)♪ )

因為沒有輪播效果不叫輪播圖,明明更改地址就能完成,忙活半天不就是為了這個,用最大的標題告訴你動畫才是輪播圖的精髓所在

主要思路是利用定時器讓本來一部完成的效果多次完成,到達指定位置關閉定時器。

要注意的問題

每次移動距離與圖片大小可能除余,導致停止位置不準確(大于或小于)或無法停止(不能剛好到達停止位置),小的誤差會逐漸積累。在定時器打開前關閉上一個計時器,否則在一個動畫未完成前點擊另一個會發生鬼畜現象

//點擊導航效果 for(let i=0;i<allA.length;i++){ allA[i].onclick=function () { move(imgList,-520*i,10); // imgList.style.left=-520*i+'px'; //換掉這個很low的過場 allA[index].style.backgroundColor=''; index=i; allA[index].style.backgroundColor='black'; } } function move(obj,target,speed) {//元素;目標位置;速度 //每次觸發事件關閉上一個定時器 //這里是重點,你可以去掉這一句后隨意點一下關差效果 clearInterval(obj.timer); var current = parseInt(window.getComputedStyle(obj,null).left); //獲得當前位置 //判斷運動方向 if(target<current){ speed = -speed; } //定時器標識 obj.timer = window.setInterval(function () { //m每次開始獲取一下當前位置 var oldValue = parseInt(window.getComputedStyle(obj,null).left); //移動并在指定位置停下 var newValue = oldValue + speed; //調整一下停止位置,小的誤差會隨時間無限放大 if((speed < 0 && newValue < target)||(speed > 0 && newValue > target)){ newValue = target; } imgList.style.left =newValue+'px'; if(newValue == target){ clearInterval(obj.timer); } },30); }

change(); //自動輪播 //一個定時器用于定時調用 function change() { setInterval(function () { index++; index=index % imgArr.length ; console.log(imgArr.length); console.log(index); move(imgList,-520*index,20); for(let i=0;i<allA.length;i++){ allA[i].style.backgroundColor=''; allA[index].style.backgroundColor='black'; } },3000); }

這樣已經能做到輪播的基本功能,但在最后一張圖片切換第一張圖片時會向左拉過全部圖片,這非常的不酷,我們要讓輪播圖持續向左循環怎么辦?

假設我們要對圖a和圖b兩個圖輪播

我們可以結尾插入一個與圖a一樣的圖在兩張圖輪播完后轉入第三張圖讓人誤認為是第一張圖片在第三張圖完成輪播后瞬間跳轉至第一張繼續輪播,此為瞞天過海之計

JavaScript Dom實現輪播圖原理和實例

對于輪播圖我們其實只需要知道原理,且不說框架,jquery完成輪播圖都不要單純手擼的十分之一的精力。

完整代碼

<!DOCTYPE html><html lang='en'><head> <meta charset='UTF-8'> <title>Title</title> <style> *{ margin: 0; padding: 0; } #out{ width:520px; height:451px ; margin: 50px auto; background-color: #00bcd4; position: relative; overflow: hidden; } #imgList{ list-style: none; position: absolute; } #imgList li{ float:left; margin: 10px; } #navDiv{ position: absolute; bottom: 15px; } #navDiv a{ float: left; width: 15px; height: 15px; background-color: #89ff00; margin: 0 5px; opacity: 0.5; } #navDiv a:hover{ background-color: red; /* 內聯樣式的優先級很高在觸發一次后覆蓋失效*/ } </style></head><body><div id='out'> <ul id='imgList'> <li><img src='http://www.b3g6.com/bcjs/pto/many.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/hello.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/timg.jpg' ></li> <li><img src='http://www.b3g6.com/bcjs/pto/zhenjing.jpg'></li> <li><img src='http://www.b3g6.com/bcjs/pto/many.jpg' ></li> </ul> <div id='navDiv'> <a href='javascript:;' ></a> <a href='javascript:;' ></a> <a href='javascript:;' ></a> <a href='javascript:;' ></a> </div></div><script> window.onload=function () { // 動態的ul長度 var imgList = document.getElementById('imgList'); var imgArr = document.getElementsByTagName('img'); imgList.style.width=520*imgArr.length+'px'; //動態導航居中 var navDiv = document.getElementById('navDiv'); var out = document.getElementById('out'); navDiv.style.left = (out.clientWidth - navDiv.clientWidth)/2+'px'; //定位效果 var allA = document.getElementsByTagName('a'); var index = 0; allA[index].style.backgroundColor='black'; //點擊導航效果 for(let i=0;i<allA.length;i++){ allA[i].onclick=function () { move(imgList,-520*i,20); setA(); // imgList.style.left=-520*i+'px'; // allA[index].style.backgroundColor=''; // index=i; // allA[index].style.backgroundColor='black'; } } // 動畫效果 function move(obj,target,speed,callback) {//元素;目標位置;速度;回調函數 clearInterval(obj.timer); var current = parseInt(window.getComputedStyle(obj,null).left); //獲得當前位置 //判斷運動方向 if(target<current){ speed = -speed; } //定時器標識 obj.timer = window.setInterval(function () { //m每次開始獲取一下位置 var oldValue = parseInt(window.getComputedStyle(obj,null).left); //移動并在指定位置停下 var newValue = oldValue + speed; //調整一下停止位置,小的誤差會隨時間無限放大 if((speed < 0 && newValue < target)||(speed > 0 && newValue > target)){ newValue = target; } imgList.style.left =newValue+'px'; if(newValue == target){ clearInterval(obj.timer); callback(); } },30); } change(); //自動輪播 //一個定時器用于定時調用 function change() { setInterval(function () { index++; index=index % imgArr.length ; move(imgList,-520*index,20,function () { if(index>=imgArr.length-1 ){ imgList.style.left =0; } setA(); }); },3000); } function setA() { for(let i=0;i<allA.length;i++){ allA[i].style.backgroundColor=''; allA[index].style.backgroundColor='black'; } } }//onload</script></body></html>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
免费在线小视频| 欧美搞黄网站| 国产精品成人a在线观看| 日韩一区免费| 日韩中文字幕| 亚洲精选91| 亚洲欧洲日韩精品在线| 欧美日韩国产在线一区| 99精品电影| 欧美日韩国产免费观看视频| 日韩国产一区二区| 日韩欧美自拍| 久久高清免费| 欧美成人精品一级| 精品国产欧美日韩| 麻豆理论在线观看| 精品中文一区| 一本综合精品| 精品国产一区二区三区噜噜噜| 91免费精品| 天堂8中文在线最新版在线| 1024精品一区二区三区| 日韩欧美少妇| 亚洲一区二区三区高清| 视频精品一区| 欧美亚洲国产日韩| 国产精品xx| 国产一区导航| 青草综合视频| 欧美gv在线| 欧美日一区二区在线观看| 国产在线观看www| 天堂久久一区| 天堂精品久久久久| 日韩欧美自拍| 亚洲另类av| 国产 日韩 欧美一区| sm捆绑调教国产免费网站在线观看 | 久久精品日韩欧美| 日韩欧美精品一区| 日韩专区欧美专区| 99精品国产一区二区三区| 国产99久久久国产精品成人免费| 免费观看久久av| 免费人成精品欧美精品| 精品国产三区在线| 亚洲三区欧美一区国产二区| 欧美少妇精品| 日本高清久久| 欧美国产美女| 青青草伊人久久| 国产精品主播在线观看| 国产精品精品| 精品国产18久久久久久二百| 日本不卡一二三区黄网| 一区二区三区视频免费观看| 国产一区二区三区四区| 美女视频网站久久| 精品国产美女a久久9999| 精品国产鲁一鲁****| 吉吉日韩欧美| 日韩欧美一区二区三区免费观看| 国产在线日韩精品| 亚洲欧美不卡| 日韩高清成人| 婷婷精品视频| 欧美日韩精品一区二区视频| 午夜久久av | 精品视频97| 久久一级电影| 中文字幕一区久| 国产成人精品一区二区三区在线| 日本久久一区| 亚洲久久在线| 影音先锋久久精品| 亚洲一区二区小说| 国产欧美日韩一区二区三区在线| 女人天堂亚洲aⅴ在线观看| 国产精品亚洲四区在线观看| 国产精品伦理久久久久久| 国产麻豆综合| 久久不卡日韩美女| 婷婷成人基地| 国产伦精品一区二区三区在线播放| 国产精品一区亚洲| 亚洲激情黄色| 日韩中文字幕麻豆| 日韩欧美中文字幕在线视频| 蜜臀av国产精品久久久久| 水蜜桃久久夜色精品一区| 一区二区国产在线观看| 亚洲精品一区二区妖精| 免费视频一区二区三区在线观看| 一本一本久久| 国产亚洲精品美女久久久久久久久久| 免费观看久久av| 亚洲二区视频| 精品国模一区二区三区| 国产精品www994| 久久狠狠久久| 午夜久久av| 亚洲丝袜美腿一区| 久久香蕉精品| 亚洲一级黄色| 最新中文字幕在线播放| 久久一区二区三区电影| 9久re热视频在线精品| 日韩在线观看中文字幕| 国产一区一一区高清不卡| 天堂网av成人| 欧美日韩亚洲一区二区三区在线| 国产精品一区二区美女视频免费看| 中文字幕色婷婷在线视频| 国产三级精品三级在线观看国产| 亚洲免费激情| 亚洲免费精品| 亚洲欧美日本国产| 亚洲精品婷婷| 国产美女久久| 国产精品一区二区av日韩在线| 欧美亚洲国产日韩| 一区二区国产精品| 国产精品入口久久| 国产高潮在线| 久久国产婷婷国产香蕉| 国产一区丝袜| 婷婷综合六月| 午夜精品影院| 日韩精品成人| 正在播放日韩精品| 日韩影院精彩在线| 国产亚洲精品美女久久| 日本精品影院| 国产精品17p| 最新日韩av| 精品一区亚洲| 欧美久久精品| 久久天堂影院| 久久久精品久久久久久96| 亚洲综合电影一区二区三区| 中文字幕在线看片| 久久高清免费| 欧美日韩精品一区二区三区视频 | 中文字幕一区二区三区四区久久| 精品女同一区二区三区在线观看| 国产三级一区| 久久a爱视频| 石原莉奈一区二区三区在线观看| 四虎成人av| 鲁大师成人一区二区三区 | 欧美a级一区二区| 国产精品男女| 免费观看不卡av| 欧美精品一二| 久久一区欧美| 蜜桃伊人久久| 亚洲福利久久| 激情不卡一区二区三区视频在线| 麻豆精品少妇| 日韩一区自拍| 精品视频一区二区三区在线观看| 狠狠久久伊人中文字幕| 国产亚洲字幕| 国产真实久久| 精品美女在线视频| 日韩欧美中文字幕电影| 国产一区二区三区亚洲综合| 久久激五月天综合精品| 好吊日精品视频 | 中文字幕日韩亚洲| 裤袜国产欧美精品一区| 欧美中文一区二区| 日韩福利视频一区| 国产精品美女久久久| 国产亚洲精品自拍| 樱桃成人精品视频在线播放| 久久精品国产www456c0m| 婷婷精品在线| 免费福利视频一区二区三区| 国产精品主播在线观看| 国产乱码精品一区二区亚洲| 国产精品视频一区二区三区四蜜臂 | 高清久久一区| 日韩精品一区二区三区中文字幕| 日韩成人一级| 国产精品日韩精品中文字幕| 亚洲男人在线| 日本精品不卡| 国产精品香蕉| 婷婷综合激情| 婷婷综合福利| 伊人久久在线| 天使萌一区二区三区免费观看| 日韩国产欧美一区二区三区| 亚洲人成高清| 国产一区二区三区成人欧美日韩在线观看| 麻豆国产欧美一区二区三区| 国产精品久久| 日本免费一区二区三区四区| 亚洲一区导航|