js上下視差滾動簡單實現(xiàn)代碼
前言: 項目中讓實現(xiàn)一個簡單的上下視差滾動,就是當(dāng)頁面滑動到某一固定位置時,讓上下兩頁面出現(xiàn)疊加效果,恢復(fù)時,展開恢復(fù)。
功能技術(shù)實現(xiàn)方式:元素定位,鼠標(biāo)事件
思路1:
一開始想著設(shè)置滾動條監(jiān)聽事件,當(dāng)?shù)焦潭ㄎ恢脮r下方元素設(shè)置relative屬性(這樣可保證不改變其原有樣式而且可以實現(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()這個方法是當(dāng)前滾動條滾動的距離
//$(window).height()獲取當(dāng)前窗體的高度
//$(document).height()獲取當(dāng)前文檔的高度
$('.div2').css('top',-scrollTop);
});
});
</script>
</html>
問題:運行以上代碼就會發(fā)現(xiàn)有一個很明顯的bug,雖然大體功能已經(jīng)實現(xiàn)了,但是因為relative的元素不管如何移動,還是會占有原本的位置。然而我們的期望是,滾動條到達(dá)讓下方元素底部時就不應(yīng)該滑動了,如何解決呢?
思路2:
我思考了良久,但是仍然沒發(fā)現(xiàn)可以讓元素既不占位置,又不改變自身樣式,所以我大膽放棄relative,選擇absolute定位,這個就需要我們自己做樣式的調(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í)慣這樣寫了
$(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>
注意:①上半部分元素的位置需要保持不動②下半部分確保層級要高于上半部分③本代碼針對的是上半部分固定,如果想讓其跟著動,需要確保下半部分滾動速度要大于上半部分
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript實現(xiàn)復(fù)制文章自動添加版權(quán)
自己辛辛苦苦寫的文章,輕易就被別人復(fù)制-粘貼去了,是不是很傷心呢?小編今天給大家整理了兩個方法,讓別人復(fù)制自己的文章時,自動在文章的結(jié)尾添加自己的版權(quán)信息。2016-08-08
echarts使用中關(guān)于y坐標(biāo)軸無法正常顯示的問題解決記錄
Echarts是由百度提供的數(shù)據(jù)可視化解決方案,下面這篇文章主要給大家介紹了關(guān)于echarts使用中關(guān)于y坐標(biāo)軸無法正常顯示的問題解決記錄,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-12-12
微信小程序中使用ECharts 異步加載數(shù)據(jù)實現(xiàn)圖表功能
本文通過實例代碼給大家介紹了微信小程序中使用ECharts 異步加載數(shù)據(jù)實現(xiàn)圖表功能,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧2018-07-07
npm install報錯無法創(chuàng)建packge.json文件的解決辦法
當(dāng)你在運行 npm install 時遇到錯誤,提示無法找到 package.json 文件,也沒有創(chuàng)建一個 package.json 文件,只創(chuàng)建了一個package-lock.json文件,本文給大家介紹詳細(xì)的解決辦法,需要的朋友可以參考下2024-02-02
微信支付如何實現(xiàn)內(nèi)置瀏覽器的H5頁面支付
這篇文章主要介紹了微信支付如何實現(xiàn)內(nèi)置瀏覽器的H5頁面支付的相關(guān)資料,需要的朋友可以參考下2015-09-09

