js上下視差滾動(dòng)簡(jiǎn)單實(shí)現(xiàn)代碼
前言: 項(xiàng)目中讓實(shí)現(xiàn)一個(gè)簡(jiǎn)單的上下視差滾動(dòng),就是當(dāng)頁(yè)面滑動(dòng)到某一固定位置時(shí),讓上下兩頁(yè)面出現(xiàn)疊加效果,恢復(fù)時(shí),展開(kāi)恢復(fù)。
功能技術(shù)實(shí)現(xiàn)方式:元素定位,鼠標(biāo)事件
思路1:
一開(kāi)始想著設(shè)置滾動(dòng)條監(jiān)聽(tīng)事件,當(dāng)?shù)焦潭ㄎ恢脮r(shí)下方元素設(shè)置relative屬性(這樣可保證不改變其原有樣式而且可以實(shí)現(xiàn)元素位置的調(diào)整),于是就誕生出一下代碼:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <style> body{ margin: 0; padding: 0; } .div1{ width: 100%; height: 500px; background: #FF0000; position: fixed; top: 0; left: 0; } .div2{ width: 100%; margin-top: 500px; height: 1000px; background: #22B0FC; position: relative; z-index: 2;; } </style> <body> <div class="div1">1111111</div> <div class="div2">22222222222222</div> </body> <script src="jquery-1.8.3.min.js"></script> <script> $(document).ready(function () { $(window).scroll(function () { var scrollTop=$(window).scrollTop(); //$(window).scrollTop()這個(gè)方法是當(dāng)前滾動(dòng)條滾動(dòng)的距離 //$(window).height()獲取當(dāng)前窗體的高度 //$(document).height()獲取當(dāng)前文檔的高度 $('.div2').css('top',-scrollTop); }); }); </script> </html>
問(wèn)題:運(yùn)行以上代碼就會(huì)發(fā)現(xiàn)有一個(gè)很明顯的bug,雖然大體功能已經(jīng)實(shí)現(xiàn)了,但是因?yàn)閞elative的元素不管如何移動(dòng),還是會(huì)占有原本的位置。然而我們的期望是,滾動(dòng)條到達(dá)讓下方元素底部時(shí)就不應(yīng)該滑動(dòng)了,如何解決呢?
思路2:
我思考了良久,但是仍然沒(méi)發(fā)現(xiàn)可以讓元素既不占位置,又不改變自身樣式,所以我大膽放棄relative,選擇absolute定位,這個(gè)就需要我們自己做樣式的調(diào)整,具體代碼如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> </head> <style> body{ margin: 0; padding: 0; } .clearfix:after { content: ''; display: block; clear: both; } .div1{ width: 100%; margin: 0 auto; height: 500px; background: bisque; position: fixed; top: 0; left: 0; } .div1 div{ width: 1200px; margin: 0 auto; height: 500px; background: #FF0000; } .div2{ width: 1200px; margin: 0 auto; height: 1500px; background: #22B0FC; z-index: 20000;; margin-top: 500px; } </style> <body> <div class="div1 clearfix"> <div>111111111111111111111111111111111111111</div> </div> <div class="div2">22222222222222</div> </body> <script src="jquery-1.8.3.min.js"></script> <script> var div2Height=Number($('.div2').offsetTop); var clientHeight=Number($(document).clientHeight); var totalHeight=div2Height-clientHeight; var objOffset=$('.div2').offset().top; var objOffsetLf=$('.div2').offset().left; $(document).ready(function () { //本人習(xí)慣這樣寫(xiě)了 $(window).scroll(function () { var scrollTop=$(window).scrollTop(); var objHeight=objOffset-scrollTop; console.log(scrollTop); if(scrollTop>=0){ $('.div2').css({'left':objOffsetLf,'top':objHeight,'position':'absolute','margin-top':'0px'}); }else{ $('.div2').css({'position':'static','margin-top':'500px'}); } }); }); </script> </html>
注意:①上半部分元素的位置需要保持不動(dòng)②下半部分確保層級(jí)要高于上半部分③本代碼針對(duì)的是上半部分固定,如果想讓其跟著動(dòng),需要確保下半部分滾動(dòng)速度要大于上半部分
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- js手機(jī)號(hào)批量滾動(dòng)抽獎(jiǎng)實(shí)現(xiàn)代碼
- 原生js實(shí)現(xiàn)水平方向無(wú)縫滾動(dòng)
- javascript實(shí)現(xiàn)文字無(wú)縫滾動(dòng)
- scroll事件實(shí)現(xiàn)監(jiān)控滾動(dòng)條并分頁(yè)顯示(zepto.js)
- jQuery插件fullPage.js實(shí)現(xiàn)全屏滾動(dòng)效果
- 全屏滾動(dòng)插件fullPage.js使用實(shí)例解析
- javascript滾輪控制模擬滾動(dòng)條
- 標(biāo)準(zhǔn)的js無(wú)縫滾動(dòng)效果
- js實(shí)現(xiàn)按鈕控制帶有停頓效果的圖片滾動(dòng)
- js實(shí)現(xiàn)無(wú)縫循環(huán)滾動(dòng)
相關(guān)文章
JavaScript實(shí)現(xiàn)復(fù)制文章自動(dòng)添加版權(quán)
自己辛辛苦苦寫(xiě)的文章,輕易就被別人復(fù)制-粘貼去了,是不是很傷心呢?小編今天給大家整理了兩個(gè)方法,讓別人復(fù)制自己的文章時(shí),自動(dòng)在文章的結(jié)尾添加自己的版權(quán)信息。2016-08-08echarts使用中關(guān)于y坐標(biāo)軸無(wú)法正常顯示的問(wèn)題解決記錄
Echarts是由百度提供的數(shù)據(jù)可視化解決方案,下面這篇文章主要給大家介紹了關(guān)于echarts使用中關(guān)于y坐標(biāo)軸無(wú)法正常顯示的問(wèn)題解決記錄,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12微信小程序中使用ECharts 異步加載數(shù)據(jù)實(shí)現(xiàn)圖表功能
本文通過(guò)實(shí)例代碼給大家介紹了微信小程序中使用ECharts 異步加載數(shù)據(jù)實(shí)現(xiàn)圖表功能,代碼簡(jiǎn)單易懂,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-07-07javascript屬性訪(fǎng)問(wèn)表達(dá)式用法分析
這篇文章主要介紹了javascript屬性訪(fǎng)問(wèn)表達(dá)式用法,實(shí)例分析了javascript屬性訪(fǎng)問(wèn)表達(dá)式的功能與使用方法,需要的朋友可以參考下2015-04-04npm install報(bào)錯(cuò)無(wú)法創(chuàng)建packge.json文件的解決辦法
當(dāng)你在運(yùn)行 npm install 時(shí)遇到錯(cuò)誤,提示無(wú)法找到 package.json 文件,也沒(méi)有創(chuàng)建一個(gè) package.json 文件,只創(chuàng)建了一個(gè)package-lock.json文件,本文給大家介紹詳細(xì)的解決辦法,需要的朋友可以參考下2024-02-02原生js代碼能實(shí)現(xiàn)call和bind嗎
這篇文章主要介紹了原生js代碼能實(shí)現(xiàn)call和bind嗎,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付
這篇文章主要介紹了微信支付如何實(shí)現(xiàn)內(nèi)置瀏覽器的H5頁(yè)面支付的相關(guān)資料,需要的朋友可以參考下2015-09-09js實(shí)現(xiàn)文字超出部分用省略號(hào)代替實(shí)例代碼
關(guān)于超出一定字?jǐn)?shù)用省略號(hào)顯示的問(wèn)題,這種要求在我們?nèi)粘i_(kāi)發(fā)的時(shí)候經(jīng)常見(jiàn)到,我們之前基本都是用CSS來(lái)完成的,今天給大家分享個(gè)Javascript實(shí)現(xiàn)這個(gè)功能的示例代碼,有需要的可以參考借鑒。2016-09-09淺談Webpack4 plugins 實(shí)現(xiàn)原理
在wabpack 核心功能除了loader應(yīng)該就是plugins插件了,本文主要介紹了Webpack4 plugins 實(shí)現(xiàn)原理,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09