使用 css 视角检测滚动行为
Detecting scroll behavior with css perspective
我设置了一个非常简单的视差示例,但我注意到在滚动元素时没有发生对 window.scrollY
的更改(总是 0
)。就好像因为我们只是在透视中移动,javascript 没有检测到任何滚动。
滚动 css 视口透视时如何检测滚动变化?
我的 css 设置如下:
* {
margin:0;
padding:0;
}
body {
}
.parallax {
overflow-x:hidden;
overflow-y:auto;
perspective:1px;
height:200vh;
}
.back {
background-color:#fff;
height:100vh;
transform:translateZ(-1px) scale(2);
}
.base {
transform:translateZ(0);
background-color:#fff;
}
.parallax__layer {
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
display:block;
}
.title {
text-align:center;
position:absolute;
left:50%;
top:50%;
color:blue;
transform:translate(-50%, -50%);
display:block;
}
而我的dom内容是:
<div class="parallax">
<div class="parallax__layer back">
<div class="title">test</div>
</div>
<div class="parallax__layer">
<div class="title">image</div>
<div class="frame">
test frame
</div>
</div>
</div>
由于溢出 属性 是在 .parallax 上设置的,因此您将检查是否在其上滚动而不是 window:
$('.parallax').on("scroll", function(){
var scrollPosition = $(this).scrollTop();
});
这里的关键是检测视差元素内的滚动——在单个帧内 div。
所以你可以这样做:
const handleScrolling () => if (window.scrollY || window.pageYOffset < totalheight) requestAnimate()
$('.parallax').on('scroll', handleScrolling);
我设置了一个非常简单的视差示例,但我注意到在滚动元素时没有发生对 window.scrollY
的更改(总是 0
)。就好像因为我们只是在透视中移动,javascript 没有检测到任何滚动。
滚动 css 视口透视时如何检测滚动变化?
我的 css 设置如下:
* {
margin:0;
padding:0;
}
body {
}
.parallax {
overflow-x:hidden;
overflow-y:auto;
perspective:1px;
height:200vh;
}
.back {
background-color:#fff;
height:100vh;
transform:translateZ(-1px) scale(2);
}
.base {
transform:translateZ(0);
background-color:#fff;
}
.parallax__layer {
position:absolute;
top:0;
left:0;
right:0;
bottom:0;
display:block;
}
.title {
text-align:center;
position:absolute;
left:50%;
top:50%;
color:blue;
transform:translate(-50%, -50%);
display:block;
}
而我的dom内容是:
<div class="parallax">
<div class="parallax__layer back">
<div class="title">test</div>
</div>
<div class="parallax__layer">
<div class="title">image</div>
<div class="frame">
test frame
</div>
</div>
</div>
由于溢出 属性 是在 .parallax 上设置的,因此您将检查是否在其上滚动而不是 window:
$('.parallax').on("scroll", function(){
var scrollPosition = $(this).scrollTop();
});
这里的关键是检测视差元素内的滚动——在单个帧内 div。
所以你可以这样做:
const handleScrolling () => if (window.scrollY || window.pageYOffset < totalheight) requestAnimate()
$('.parallax').on('scroll', handleScrolling);