怎樣用原生js配合css的transition寫個無縫滾動

之所以想要寫原生js配合css轉換的無縫滾動,是因為之前在簡書上看到一哥們寫的一篇文章,說是在網上找了一堆js配合css transition屬性寫的輪播插件,可惜沒有無縫的效果,結果他用原生js重寫了一個可以無縫滾動的。好吧,我覺得這哥們的精神還是值得表揚的,只是原生實現略顯麻煩,也很難把握性能(利用定時器寫的動畫很容易有性能問題)。

原生JavaScript無縫輪播圖特效 附上鏈接方便大家一同對比學習

其實原生js配合css轉換寫個無縫滾動要比直接用原生js寫起來簡單得多,而且性能非常好。希望通過這篇文章能起到拋磚引玉的笑果!哈哈哈哈,二話不說,上碼!!!

首先附上相應的HTML和CSS:

html

<div class="box"><ul id="box"><li>158****546已購買1個月</li><li>158****546已購買2個月</li><li>158****546已購買3個月</li><li>158****546已購買4個月</li><li>158****546已購買5個月</li><li>158****546已購買1個月</li></ul></div>
復制代碼

css

     .box{width: 300px;height: 40px;overflow: hidden;border: 1px solid rebeccapurple;}.box>ul{margin: 0;padding: 0;}.box>ul>li{list-style-type: none;width: 300px;height: 40px;line-height: 40px;}.count{font-size: 24px;}
復制代碼

細心的朋友可能會發現HTML上面首尾兩個li是一樣的(哈哈哈,就是說明一下它倆是一樣的)上圖!!啊哈哈哈哈,將就看一下,我畫了好久的。這里為了節約空間就橫著放了,下面的例子的滾動是向上走的。

當焦點位于圖片1的副本(即紅框那個1)時,那一瞬間讓整個列表回到初始的位置,即第一個1在紅框內。對,最后面這個副本1就是為了讓用戶產生視覺差。

下面開始編寫相應的js,先寫一個構造函數,然后把獲取的id以及向上滑動的數值作為私有變量寫死在構造函數里面:

function sliderBox() {var list = document.getElementById('box'),newPosition = 0,  //這里以ul作為位移目標,newPosition為ul每次的位置offset = -40;   //每次要上移的數值(先默認為上移)
}
復制代碼

然后在構造函數里面寫一個私有函數

function animate () {newPosition+=offset;list.style.transition = "transform 0.6s";list.style.transform = "translateY(" + newPosition + "px)";if (newPosition < -160) {setTimeout(function () {newPosition = 0;list.style.transition = "";list.style.transform = "translateY(0)";}, 600);}}
復制代碼

我們今天要說的是無縫滾動,到底在哪體現出無縫呢?上面的代碼怎么多出了一行list.style.transition?為什么不直接寫死在ul上面呢?因為這就是用原生js配合css轉換寫無縫滾動的關鍵所在!!

當列表靜悄悄地重一開始滑到第五個的時候,這是newPosition剛好等于-160,也就是說ul的translateY為-160,這時候再來那么一下,這么一下照常的會執行這三行:

newPosition+=offset;
list.style.transition = "transform 0.6s";
list.style.transform = "translateY(" + newPosition + "px)";
復制代碼

是的,就在這一下的transition過渡完的那一瞬間,setTimeout可以執行了。沒錯,就跟前面畫的圖一樣,setTimeout里面的意思就是要讓ul回到最起始的位置。

這里需要注意的是,setTimeout的延遲時間和transition的過渡時間必須保持一致,這里就是保持無縫的最關鍵所在了。

到這里就算是講完了,其實沒多少東西,理解了就很簡單。最后祭上代碼

html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>.box{width: 300px;height: 40px;overflow: hidden;border: 1px solid rebeccapurple;}.box>ul{margin: 0;padding: 0;}.box>ul>li{list-style-type: none;width: 300px;height: 40px;line-height: 40px;}.count{font-size: 24px;}</style>
</head>
<body><div class="box"><ul id="box"><li>158****546已購買1個月</li><li>158****546已購買2個月</li><li>158****546已購買3個月</li><li>158****546已購買4個月</li><li>158****546已購買5個月</li><li>158****546已購買1個月</li></ul></div><script src="./slider2.js"></script><script>window.onload = function () {sliderBox();}</script>
</body>
</html>
復制代碼

js

function sliderBox() {var list = document.getElementById('box'),newPosition = 0,offset = -40;if (!(this instanceof sliderBox)) {return new sliderBox().init();}this.init = function () {setInterval(animate, 3000);};function animate () {newPosition+=offset;list.style.transition = "transform 0.6s";list.style.transform = "translateY(" + newPosition + "px)";if (newPosition < -160) {setTimeout(function () {newPosition = 0;list.style.transition = "";list.style.transform = "translateY(0)";}, 600);}}
}
復制代碼

在下文筆拙劣,有什么不清楚或者有出入的地方,煩請斧正!歡迎留言!也希望能給我點贊,鼓勵我寫出更好的文章。


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/282689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282689.shtml
英文地址,請注明出處:http://en.pswp.cn/news/282689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

聊聊策略模式

1、簡介策略模式就是把各個平等的具體實現進行抽象、封裝成為獨立的算法類&#xff0c;然后通過上下文和具體的算法類來進行交互。各個策略算法都是平等的&#xff0c;地位是一樣的&#xff0c;正是由于各個算法的平等性&#xff0c;所以它們才是可以相互替換的。雖然我們可以動…

小學計算機課每周幾節,小學信息技術課時多少

滿意答案小學信息技術課程標準一、課程任務和教學目標中小學信息技術課程的主要任務是&#xff1a;培養學生對信息技術的興趣和意識&#xff0c;讓學生了解和掌握信息技術基本知識和技能&#xff0c;了解信息技術的發展及其應用對人類日常生活和科學技術的深刻影響。通過信息技…

張旭升20162329 2006-2007-2 《Java程序設計》第一周學習總結

20162329 2006-2007-2 《Java程序設計》第一周學習總結 教材學習內容總結 通過打書上的代碼熟悉了Java編程的基本過程 教材學習中的問題和解決過程 1.因為我的虛擬機不可用所以我在Windows中安裝了bash和git&#xff0c;但是由于Windows下bash中沒有中文而且我英語又不是很好所…

《圖解 HTTP》讀書筆記(未完待續)

ARP 協議&#xff08;Address Resolution Protocol&#xff09;一種以解析地址的協議&#xff0c;根據通信雙方的 IP 地址就可以查出對應的 MAC 地址。MAC&#xff08; Media Access Control Address&#xff09;地址是指網卡所屬的固定的地址MIME&#xff0c;多部分對象集合&a…

SQL查詢的安全方案

1.使用預處理語句防sql注入 2.寫入數據庫的數據要進行特殊字符轉義 3.錯誤信息不返回給用戶,記錄到日志 4.定期做數據備份 5.不給查詢用戶root權限,合理分配權限 6.關閉遠程訪問數據庫權限 7.修改root口令,不使用默認口令,使用較復雜口令 8.刪除多余的用戶 9.改變root用戶的名稱…

.NET 實現啟動時重定向程序運行路徑及 Windows 服務運行模式部署

日常工作中有時候會遇到需要將程序直接在服務器上運行&#xff0c;而不依賴于 IIS 托管的情況&#xff0c;直接運行有兩種方式&#xff0c;一種是部署為 服務模式&#xff0c;另一種則是 直接啟動 .NET 發布之后的 exe 文件以 控制臺模式運行&#xff0c;控制臺模式運行主要問題…

iOS runtime實戰應用:關聯對象

在開始之前建議先閱讀iOS runtime的基礎理解篇&#xff1a;iOS內功篇&#xff1a;runtime 有筒子在面試的時候&#xff0c;遇到這樣一個問題&#xff1a;“如何給NSArray添加一個屬性&#xff08;不能使用繼承&#xff09;”&#xff0c;筒子立馬蒙逼了&#xff0c;不能用繼承&…

黑龍江科技大學計算機考研復試科目,2020年黑龍江科技大學計算機應用技術考研經驗分享...

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓育明考研備考策略隨著IT業的迅猛發展&#xff0c;各高校計算機專業報名火爆&#xff0c;甚至文科學生跨專業報考時都會選擇計算機。計算機專業競爭日趨激烈&#xff0c;那么如何在充分發揮公共科目優勢的同時&#xff0c;盡量縮小專…

Mysql數據庫安全性問題【防注入】

一、SQL注入實例 后臺的插入語句代碼&#xff1a; $unsafe_variable $_POST[user_input]; mysql_query("INSERT INTO table (column) VALUES ($unsafe_variable)"); 當POST的內容為&#xff1a; value); DROP TABLE table;--以上的整個SQL查詢語句變成&#xff1…

Unexpected end of JSON input while parsing near錯誤解決方式(網上的方法)

原本是想創建一個create-react-app來著&#xff0c;但是在創建的中間會出現Unexpected end of JSON input while parsing near... 的錯誤。 在網上找到了一些方法&#xff0c;首先是清空npm的緩存。 npm cache clean --force 氮素&#xff0c;然并卵。near后面的內容變化了一下…

解決Qt5 Creator無法切換輸入法(fcitx),Ubuntu中不能使用搜狗輸入法錄入漢字問題...

2016年6月8日修正&#xff0c;ubuntu 16.04 Qt5.7.0 以及 Qt5.6.1均測試通過在Qt5.3之前&#xff0c;我發布過解決辦法 解決Qt5 Creator無法切換輸入法&#xff08;fcitx&#xff09;&#xff0c;不能錄入漢字問題&#xff0c;Qt5.4以及Qt5.5&#xff0c;舊辦法失效&#xff0c…

目前市場上用于個人計算機的硬盤尺寸是,第5章-硬盤(計算機組裝與維護).docx

ADDIN CNKISM.UserStyle一、選擇題1.磁盤存儲器的主要技術指標有多項&#xff0c;下面不屬于硬盤指標的是( )。A.存儲容量B.單碟容量C.轉速D.帶寬2.硬盤的平均尋道時間通常以毫秒為單位測量&#xff0c;是指( )。A.磁頭從一個柱面移到另一個隨機距離遠的柱面所需的平均時間B.…

Xmemcached學習筆記一(安裝memcached)

memcached有三種java客戶端 第一種&#xff1a;Com.danga 包下面的memcached&#xff0c;需引入jar(本人用的是memcached-2.5.2.jar 文末附上附件需要的可以下載) 第二種&#xff1a;spyMemcached 第三種&#xff1a;XMemcached 據說第三種是使用最簡單&#xff0c;最好用的&a…

WrapPanel 實現虛擬化

WrapPanel 實現虛擬化控件名&#xff1a;VirtualizingWrapPanel作者&#xff1a;WPFDevelopersOrg原文鏈接&#xff1a; https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40&#xff1b;Visual Studio 2022;項目使用 MIT 開源許可協議&#xff1b;眾…

pdo連接mysql數據庫(簡潔明了)

一 實例化pdo對象 $dsn "mysql:dbnametest;host127.0.0.1"; $pdo new PDO($dsn,root,root);二 數據查詢 1、如果不根據用戶傳過來的值進行操作,可以直接query sql $dsn "mysql:dbnametest;host127.0.0.1"; $pdo new PDO($dsn,root,root); $sql &qu…

一次微信小程序的快速開發體驗

起因 事情是這樣的 一天早上組里還早激烈的討論某個項目的可用性和發展前景&#xff0c;突然老大說了句&#xff0c;能不能做個小程序的版本呢&#xff1f;然后大家紛紛討論起來&#xff0c;有反對有支持&#xff0c;我就說了一句&#xff0c;剛出來的時候搞過一會。。。然后就…

造數據時踏過的坑

1.在產生隨機數時,在數據規模很大的時候很難出現自己要的模型,比如某個條件的數據量,此時要寫一個方法,來造一批這樣的數據 2.將控制數量,文件路徑寫成配置文件的形式,以免重復打包 3.輸入輸出文件夾,可以配置以免重復打包 轉載于:https://www.cnblogs.com/rocky-AGE-24/p/7376…

如何證明 ConcurrentDictionary 字典操作不全是線程安全的

前言最近&#xff0c;看到一篇文章&#xff0c;講到《ConcurrentDictionary字典操作竟然不全是線程安全的&#xff1f;》。首先&#xff0c;這個結論是正確的&#xff0c;但文中給出的一個證明例子&#xff0c;我覺得是有問題的。相關代碼如下&#xff1a;using System.Collect…

微型計算機及接口技術試題,1月自考微型計算機及其接口技術試題及答案解析...

《1月自考微型計算機及其接口技術試題及答案解析》由會員分享&#xff0c;可在線閱讀&#xff0c;更多相關《1月自考微型計算機及其接口技術試題及答案解析(11頁珍藏版)》請在人人文庫網上搜索。1、精品自學考試資料推薦全國 2018年 1月自考微型計算機及其接口技術試題課程代碼…

16-djongo中間件學習

目錄 前戲 我們在前面的課程中已經學會了給視圖函數加裝飾器來判斷是用戶是否登錄&#xff0c;把沒有登錄的用戶請求跳轉到登錄頁面。我們通過給幾個特定視圖函數加裝飾器實現了這個需求。但是以后添加的視圖函數可能也需要加上裝飾器&#xff0c;這樣是不是稍微有點繁瑣。 學完…