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)twitter puddles算法實(shí)例
這篇文章主要介紹了JavaScript實(shí)現(xiàn)twitter puddles算法實(shí)例,本文源自twitter的一道面試題,本文使用js解開(kāi)了這首題,需要的朋友可以參考下2014-12-12
利用Ext Js生成動(dòng)態(tài)樹(shù)實(shí)例代碼
今天在公司幫同事寫(xiě)了個(gè)用Ext Js生成動(dòng)態(tài)樹(shù)的Demo,在這里分享一下,也好供以后自己查閱。2008-09-09
聊聊JS動(dòng)畫(huà)庫(kù) Velocity.js的使用
本篇文章主要介紹了聊聊JS動(dòng)畫(huà)庫(kù) Velocity.js的使用,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
iscroll碰到Select無(wú)法選擇下拉刷新的解決辦法
本文主要介紹iscroll插件在使用中,遇到select下拉框無(wú)法下拉刷新的處理方法,希望能幫到大家。2016-05-05
JS?中在嚴(yán)格模式下?this?的指向問(wèn)題
這篇文章主要介紹了JS?中在嚴(yán)格模式下this的指向問(wèn)題,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-09-09

