最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實現(xiàn)圖片無縫滾動特效

 更新時間:2020年03月19日 10:49:56   作者:老貝V5  
這篇文章主要為大家詳細介紹了js實現(xiàn)圖片無縫循環(huán)滾動特效的相關(guān)資料,本實例在網(wǎng)頁中較為常見,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

首先,無縫滾動的第一個重點就是——動。關(guān)于怎么讓頁面的元素節(jié)點動起來,這就得學(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ù)一次,說簡單點的話,就是setInterval是setTimeout的循環(huán)版。

  關(guān)于定時器還有一個用法:消除定時器,方法同樣有兩種:clearTimeout 和 clearInterval,它們分別對應(yīng)不同類型的定時器。另外,它們都只接收一個參數(shù),這個參數(shù)是定時器返回的一個值(我在chrome中調(diào)試發(fā)現(xiàn)這個返回值都是數(shù)字),用于指定消除那個定時器。

  定時器的知識掌握之后,就開始分析怎樣使用定時器讓元素動起來。其實這個很簡單,就是類似電影的原理一樣,讓元素在很短的時間內(nèi)發(fā)生連續(xù)的位移,我們看起來的話這個元素就想是在不停地運動啦。關(guān)于怎么讓元素產(chǎn)生位移,通過JS修改元素的樣式就可以實現(xiàn),例如

oUl.style.left = oUl.offsetLeft + speed + 'px';

  上面的代碼中speed就是每次產(chǎn)生的位移。關(guān)于speed使用還挺有意思的:我們可以修改speed的正負值來修改滾動的方向。

  另外,關(guān)于元素的屬性 offsetLeft 我個人認為需要注意兩點:offsetLeft的值由它自己通過定位的left和自己設(shè)定的margin的和、offsetLeft它是相對于它的包含層的距離(offsetTop類似)。當然這都是我自己的理解,肯定不是很準確,這個坑記著,下次專門解決它。

  讓元素動起來的原理基本就是這樣,下面開始分析這個無縫滾動展示圖片的實現(xiàn)方法,我舉得例子都是向左滾動的,向右的原理一樣,代碼中有提到:

  首先假設(shè)需要循環(huán)滾動的圖片只有4張,為了滿足圖片滾動起來有循環(huán)的要求,就需要把圖片如圖(1)這樣做:

  這樣當?shù)谝粡垐D片1滾動出邊框時,后面的圖片1則出現(xiàn)在圖片4的后面,這樣效果看起來就和循環(huán)一樣~

  當圖片滾動到下面的這種情況時:

  繼續(xù)滾動就會導(dǎo)致圖片后面出現(xiàn)空白,就不是循環(huán)滾動的效果了,其實這點也是程序的關(guān)鍵所在,每當圖片滾動到圖(2)這種情況時,就應(yīng)該讓圖片重新回到圖(1)那種狀態(tài)再繼續(xù)滾動,這樣的話就形成了無縫循環(huán)滾動的效果。

  另外拓展一下程序?qū)懥耸髽艘迫雸D片停止?jié)L動,移出繼續(xù)滾動的效果,就是利用消除定時器的方法實現(xiàn)的,代碼很簡單就不介紹了。還有我為了樣式好看一點,把圖片都設(shè)置為160*120的尺寸使用的,大家運行代碼是需要自己準備圖片。

代碼如下:

<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)){//向左滾動,當靠左的圖4移出邊框時
     oUl.style.left = 0;
    }

    if(oUl.offsetLeft > 0){//向右滾動,當靠右的圖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);//鼠標移入清除定時器
   },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實現(xiàn)無縫滾動特效的詳細代碼,希望對大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • js數(shù)組實現(xiàn)權(quán)重概率分配

    js數(shù)組實現(xiàn)權(quán)重概率分配

    今天寫了一個js控制頁面輪播的功能,如果僅僅使用隊列很簡單,但是考慮到為每一個頁面分配權(quán)重的是否變的異常復(fù)雜,使用switch和if else也無法解決,于是想到使用js數(shù)組實現(xiàn)
    2017-09-09
  • TypeScript利用TS封裝Axios實戰(zhàn)

    TypeScript利用TS封裝Axios實戰(zhàn)

    這篇文章主要介紹了TypeScript利用TS封裝Axios實戰(zhàn),TypeScript封裝一遍Axios,能進一步鞏固TypeScript的基礎(chǔ)知識,需要的小伙伴可以參考一下
    2022-06-06
  • Bootstrap每天必學(xué)之縮略圖與警示窗

    Bootstrap每天必學(xué)之縮略圖與警示窗

    Bootstrap每天必學(xué)之縮略圖與警示窗,對Bootstrap縮略圖與警示窗小編也了解的很少,希望通過這篇文章和大家更多的去學(xué)習(xí)Bootstrap縮略圖與警示窗,從中得到收獲。
    2015-11-11
  • JavaScript使用prototype原型實現(xiàn)的封裝繼承多態(tài)示例

    JavaScript使用prototype原型實現(xiàn)的封裝繼承多態(tài)示例

    這篇文章主要介紹了JavaScript使用prototype原型實現(xiàn)的封裝繼承多態(tài),涉及javascript prototype與面向?qū)ο蟪绦蛟O(shè)計相關(guān)操作技巧,需要的朋友可以參考下
    2018-08-08
  • javascript實現(xiàn)根據(jù)函數(shù)名稱字符串動態(tài)執(zhí)行函數(shù)的方法示例

    javascript實現(xiàn)根據(jù)函數(shù)名稱字符串動態(tài)執(zhí)行函數(shù)的方法示例

    這篇文章主要介紹了javascript實現(xiàn)根據(jù)函數(shù)名稱字符串動態(tài)執(zhí)行函數(shù)的方法,結(jié)合實例形式分析了JS函數(shù)名的判斷及函數(shù)動態(tài)調(diào)用相關(guān)操作技巧,需要的朋友可以參考下
    2016-12-12
  • javascript函數(shù)式編程程序員的工具集

    javascript函數(shù)式編程程序員的工具集

    函數(shù)式編程語言一向被認為是比其它編程語言更高深的語言。一是因為函數(shù)式編程語言的語法很另類,比如Lisp語言,二是因為函數(shù)式編程語言都很古老,比如Schema語言。在如今面向?qū)ο笳Z言大行其道的時代,函數(shù)式編程語言有其特殊的優(yōu)勢
    2015-10-10
  • 使用Axios結(jié)合Typescript二次封裝完整詳細場景使用案例

    使用Axios結(jié)合Typescript二次封裝完整詳細場景使用案例

    本文詳細介紹了如何使用TypeScript對Axios進行二次封裝,以提高HTTP請求的統(tǒng)一管理和可維護性,通過創(chuàng)建Axios實例、封裝請求和響應(yīng)處理、錯誤處理以及創(chuàng)建特定的API服務(wù),可以實現(xiàn)更加一致和方便的API調(diào)用,需要的朋友可以參考下
    2024-11-11
  • 原生JS京東輪播圖代碼

    原生JS京東輪播圖代碼

    這篇文章主要為大家詳細介紹了原生JS京東輪播圖代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • Javascript中Microtask和Macrotask鮮為人知的知識點

    Javascript中Microtask和Macrotask鮮為人知的知識點

    這篇文章主要為大家介紹了Javascript中Microtask和Macrotask鮮為人知的知識點講解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步早日升職加薪
    2022-04-04
  • js獲取指定日期前后的日期代碼

    js獲取指定日期前后的日期代碼

    js獲取指定日期前后的日期,在實際應(yīng)用中還是比較實用的,下面為大家簡單介紹下具體的實現(xiàn)過程,有需要的朋友可以參考下
    2013-08-08

最新評論

淮北市| 洪湖市| 磴口县| 阜新| 内乡县| 东丽区| 莎车县| 鄂伦春自治旗| 乐至县| 田阳县| 天镇县| 广昌县| 丰城市| 安吉县| 高安市| 楚雄市| 鄄城县| 南汇区| 外汇| 揭阳市| 姜堰市| 泸溪县| 石狮市| 临桂县| 伊宁县| 霞浦县| 浠水县| 六枝特区| 中卫市| 晋江市| 鱼台县| 合作市| 扎鲁特旗| 西藏| 晋城| 凯里市| 信丰县| 开鲁县| 郧西县| 庄河市| 池州市|