js實(shí)現(xiàn)圖片無縫滾動特效
首先,無縫滾動的第一個重點(diǎn)就是——動。關(guān)于怎么讓頁面的元素節(jié)點(diǎn)動起來,這就得學(xué)明白關(guān)于JavaScript中定時器的相關(guān)知識。
JS中的創(chuàng)建定時器的方法包括兩種:setTimeout和setInterval。首先它們接收的參數(shù)相同:第一個參數(shù)是一個函數(shù),用于定時器執(zhí)行,第二個參數(shù)是一個數(shù)字,代表過多少毫秒之后定時器執(zhí)行函數(shù)。它們的不同在于:setTimeout 是在經(jīng)過指定的時間之后,只執(zhí)行一次函數(shù),而setInterval,則是每間隔指定時間,就執(zhí)行函數(shù)一次,說簡單點(diǎn)的話,就是setInterval是setTimeout的循環(huán)版。
關(guān)于定時器還有一個用法:消除定時器,方法同樣有兩種:clearTimeout 和 clearInterval,它們分別對應(yīng)不同類型的定時器。另外,它們都只接收一個參數(shù),這個參數(shù)是定時器返回的一個值(我在chrome中調(diào)試發(fā)現(xiàn)這個返回值都是數(shù)字),用于指定消除那個定時器。
定時器的知識掌握之后,就開始分析怎樣使用定時器讓元素動起來。其實(shí)這個很簡單,就是類似電影的原理一樣,讓元素在很短的時間內(nèi)發(fā)生連續(xù)的位移,我們看起來的話這個元素就想是在不停地運(yùn)動啦。關(guān)于怎么讓元素產(chǎn)生位移,通過JS修改元素的樣式就可以實(shí)現(xiàn),例如
oUl.style.left = oUl.offsetLeft + speed + 'px';
上面的代碼中speed就是每次產(chǎn)生的位移。關(guān)于speed使用還挺有意思的:我們可以修改speed的正負(fù)值來修改滾動的方向。
另外,關(guān)于元素的屬性 offsetLeft 我個人認(rèn)為需要注意兩點(diǎn):offsetLeft的值由它自己通過定位的left和自己設(shè)定的margin的和、offsetLeft它是相對于它的包含層的距離(offsetTop類似)。當(dāng)然這都是我自己的理解,肯定不是很準(zhǔn)確,這個坑記著,下次專門解決它。
讓元素動起來的原理基本就是這樣,下面開始分析這個無縫滾動展示圖片的實(shí)現(xiàn)方法,我舉得例子都是向左滾動的,向右的原理一樣,代碼中有提到:
首先假設(shè)需要循環(huán)滾動的圖片只有4張,為了滿足圖片滾動起來有循環(huán)的要求,就需要把圖片如圖(1)這樣做:
這樣當(dāng)?shù)谝粡垐D片1滾動出邊框時,后面的圖片1則出現(xiàn)在圖片4的后面,這樣效果看起來就和循環(huán)一樣~
當(dāng)圖片滾動到下面的這種情況時:
繼續(xù)滾動就會導(dǎo)致圖片后面出現(xiàn)空白,就不是循環(huán)滾動的效果了,其實(shí)這點(diǎn)也是程序的關(guān)鍵所在,每當(dāng)圖片滾動到圖(2)這種情況時,就應(yīng)該讓圖片重新回到圖(1)那種狀態(tài)再繼續(xù)滾動,這樣的話就形成了無縫循環(huán)滾動的效果。
另外拓展一下程序?qū)懥耸髽?biāo)移入圖片停止?jié)L動,移出繼續(xù)滾動的效果,就是利用消除定時器的方法實(shí)現(xiàn)的,代碼很簡單就不介紹了。還有我為了樣式好看一點(diǎn),把圖片都設(shè)置為160*120的尺寸使用的,大家運(yùn)行代碼是需要自己準(zhǔn)備圖片。
代碼如下:
<html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style> *{ margin: 0; padding: 0; } #div1{ width: 640px; height: 120px; margin: 100px auto; background-color: #646464; position: relative; overflow: hidden; } #div1 ul{ position:absolute; left:0; top:0; overflow: hidden; background-color: #3b7796; } #div1 ul li{ float: left; width: 160px; height: 120px; list-style: none; } </style> <script> window.onload = function(){ var oDiv = document.getElementById('div1'); var oUl = document.getElementById('ul1'); var speed = 2;//初始化速度 oUl.innerHTML += oUl.innerHTML;//圖片內(nèi)容*2-----參考圖(2) var oLi= document.getElementsByTagName('li'); oUl.style.width = oLi.length*160+'px';//設(shè)置ul的寬度使圖片可以放下 var oBtn1 = document.getElementById('btn1'); var oBtn2 = document.getElementById('btn2'); function move(){ if(oUl.offsetLeft<-(oUl.offsetWidth/2)){//向左滾動,當(dāng)靠左的圖4移出邊框時 oUl.style.left = 0; } if(oUl.offsetLeft > 0){//向右滾動,當(dāng)靠右的圖1移出邊框時 oUl.style.left = -(oUl.offsetWidth/2)+'px'; } oUl.style.left = oUl.offsetLeft + speed + 'px'; } oBtn1.addEventListener('click',function(){ speed = -2; },false); oBtn2.addEventListener('click',function(){ speed = 2; },false); var timer = setInterval(move,30);//全局變量 ,保存返回的定時器 oDiv.addEventListener('mouseout', function () { timer = setInterval(move,30); },false); oDiv.addEventListener('mousemove', function () { clearInterval(timer);//鼠標(biāo)移入清除定時器 },false); } </script> </head> <body> <input id="btn1" type="button" value="向左"> <input id="btn2" type="button" value="向右"> <div id="div1"> <ul id="ul1"> <li><img src="img/img_1.jpg"></li> <li><img src="img/img_2.jpg"></li> <li><img src="img/img_3.jpg"></li> <li><img src="img/img_4.jpg"></li> </ul> </div> </body> </html>
以上就是js實(shí)現(xiàn)無縫滾動特效的詳細(xì)代碼,希望對大家的學(xué)習(xí)有所幫助。
- 徹底搞懂JS無縫滾動代碼
- div+css+js實(shí)現(xiàn)無縫滾動類似marquee無縫滾動兼容firefox
- js 實(shí)現(xiàn)無縫滾動 兼容IE和FF
- js向上無縫滾動,網(wǎng)站公告效果 具體代碼
- jcarousellite.js 基于Jquery的圖片無縫滾動插件
- javascript實(shí)現(xiàn)的左右無縫滾動效果
- js實(shí)現(xiàn)可控制左右方向的無縫滾動效果
- js實(shí)現(xiàn)文字列表無縫滾動效果
- JQuery插件Marquee.js實(shí)現(xiàn)無縫滾動效果
- JavaScript定時器實(shí)現(xiàn)無縫滾動圖片
相關(guān)文章
微信小程序?qū)崿F(xiàn)分類菜單激活狀態(tài)隨列表滾動而自動切換效果詳解
這篇文章主要介紹了微信小程序分類菜單激活狀態(tài)跟隨列表滾動自動切換,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧2023-01-01微信小程序整個頁面的自動適應(yīng)布局的實(shí)現(xiàn)
這篇文章主要介紹了微信小程序整個頁面的自動適應(yīng)布局的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07JavaScript檢測并限制復(fù)選框選中個數(shù)的方法
這篇文章主要介紹了JavaScript檢測并限制復(fù)選框選中個數(shù)的方法,涉及javascript針對復(fù)選框的判定與運(yùn)算相關(guān)技巧,非常簡單實(shí)用,需要的朋友可以參考下2015-08-08Canvas?drawImage方法實(shí)現(xiàn)圖片壓縮詳解
這篇文章主要為大家介紹了Canvas?drawImage方法實(shí)現(xiàn)圖片壓縮詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11在webstorm開發(fā)微信小程序之使用阿里自定義字體圖標(biāo)的方法
這篇文章主要介紹了在webstorm開發(fā)微信小程序之使用阿里自定義字體圖標(biāo) 的相關(guān)資料,需要的朋友可以參考下2018-11-11原生js實(shí)現(xiàn)的金山打字小游戲(實(shí)例代碼詳解)
這篇文章主要介紹了原生js實(shí)現(xiàn)的金山打字小游戲,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03