【发布时间】:2018-03-16 10:02:11
【问题描述】:
我一直在尝试重新创建在此网站 www.section32.com 上完成的滚动效果,其中元素与向上或向下滚动相对应而倾斜。
我试图做到这一点的方法是在一个滚动到一个限制时更新 transform:skew 值,然后当它们停止滚动以转换回来时。
但是,这里的效果非常流畅。看看他们的代码,他们正在使用变换矩阵,但不是所有可以在矩阵中完成的事情都可以用正常的变换值完成吗?
如何实现这种效果并使其像这里一样流畅?
这是我的代码:
window.onscroll=function(){
if(!os) os=window.pageYOffset; //original scrollTop value
if(window.pageYOffset-os>0 && ns>-3) ns-=0.125;
else if(window.pageYOffset-os<=0 && ns<3) ns=Math.abs(ns+=1);
clearTimeout(timer);
for(var i=0; i<items.length; i++){
items[i].style.transform="skew("+ns+"deg) translateY("+ns/2+"px) rotate("+ns/-7+"deg)";
}
timer=setTimeout(function(){
//console.log('scrolling done!', window.pageYOffset);
for(var i=0; i<items.length; i++){
items[i].className+=" inPlace";
items[i].addEventListener('transitionend', function(){
var n=this.className;
n=n.replace(/inPlace/g, "");
this.style.transform="skew(0)";
this.className=n;
});
}
os=timer=null;
ns=-1;
}, 100);
};
【问题讨论】:
-
我们可以有一个完整的代码来看看发生了什么吗?
标签: javascript css matrix css-transitions transform