我创建了一个简单的函数,负责倒转滚动方向,但它看起来像cpu很重,导致移动设备上的延迟 - 我的假设。首先,我认为它必须是这样的,我没有办法优化它,直到我发现具有类似功能但没有滞后的网站。 Modify scroll direction在应用修改后的滚动方向后,在移动设备上滚动滞后
这里是问题的网站链接:http://buero-buero.org/
Apperently他们使用的是这样的:
<script>
function crisscross() {
$('down-left').style.bottom = '-' + window.scrollY + 'px';
$('down-right').style.bottom = '-' + window.scrollY + 'px';
$('left').style.left = '-' + window.scrollY + 'px';
$('right').style.right = '-' + window.scrollY + 'px';
}
</script>
这里是如何看起来像我的手机上我在这个问题上发现了这个:
正如你可以看到它是黄油光滑,即使我已经减少了fps,以适应gif的2MB限制。
我的功能看起来像这样:
$(".wrap-work-right").css("bottom", window.scrollY * -1);
在这两种情况下,滚动方向是通过改变bottom
值操作 - 而不只是让专注于bottom
。
这里是我的功能看起来像我的手机上:因为它不使用任何JS
左侧正常工作。在我应用该功能的右侧,显然跟不上计算window.scrollY * -1
。
它可能会改变,因为我继续测试不同的选项,但这里是链接到我的网站(测试版本):http://mateuszkusz.com/ - 我仍在努力。由于我是一个begginer,我不能保证它能在所有浏览器上运行。
为什么我的反转滚动方向版本慢得多?我试图用mp4和png文件替换gif。我也试图操纵translateY
而不是bottom
:
var shiftValue = $(window).scrollTop() * 1 + 'px';
$('.wrap-work-right').css('transform', 'translateY(' + shiftValue + ')');
其他我也明白我的js文件只留下一个功能,看看CPU使用率较低,但unfortunetaly滞后仍然是一个事。也许问题是在服务器端?我正在使用可以托管。或者,也许我的图像结构太复杂了?
我想修复这个2天,但我没有想法,所以我会感激任何提示。
编辑:作为NA实验,我已经删除了js文件和索引之间的连接。我决定测试纯javascript:
<script>
window.onscroll = function() {
document.getElementsByClassName("wrap-work-right")[0].style.bottom = '-' + window.scrollY + 'px';
}
</script>
它看起来像它的效果更好,但只有当gifs不在视图。我将不得不做更多的测试。
编辑:这里是我的jsfiddle逆滚动功能(简本)的:
$(window).on("scroll resize", function(){
$(".right").css("bottom", window.scrollY * -1);
});
* {
margin: 0;
padding: 0;
}
body {
height: 100%;
width: 100%;
}
.break-off {
position: relative;
float: left;
width: 100%; \t
}
.break-screen {
height: calc(100vh - 48px);
}
.break-shot {
height: 16px;
}
.wrapp {
position: fixed;
width: calc(100% - 48px);
left: 24px;
top: 0px;
height: 100vh;
}
.absolute {
position: absolute;
}
.left {
position: absolute;
top: 0px;
width: calc(50% - 8px);
left: 0px;
}
.right {
position: absolute;
bottom: 0px;
width: calc(50% - 8px);
right: 0px;
}
.shot {
float: left;
position: relative;
width: 100%;
height: 400px;
background-color: #000;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="wrapp absolute">
<div class="left">
<div class="break-off break-screen"></div>
<div class="shot"></div>
<div class="break-off break-shot"></div>
<div class="shot"></div>
<div class="break-off break-screen"></div>
</div>
</div>
<div class="wrapp">
<div class="right">
<div class="shot"></div>
<div class="break-off break-shot"></div>
<div class="shot"></div>
<div class="break-off break-screen"></div>
</div>
</div>
在过去,我只有一个包装有固定的位置。我正在使用jquery来获取左侧容器的高度,然后将它应用到身体上以便能够滚动,但在这种情况下,我的左侧和右侧立即滞后。
您可以创建http://jsfiddle.net最小的例子吗?另外我会尝试的第一件事是做与其他网站相同的js,看看是否可以解决这个问题 – Huangism
我可以,但请告诉我,这个例子中应该包括什么?我提供了滚动功能的代码,并链接到我的网站与实时版本,所以我不知道我应该在jsfiddle.net中呈现。编辑:我不知道如何实现这个js到我的项目。我正在尝试,但它根本没有工作。 :( – Tanuki
只需使用已经完成的原生js,看起来对我来说很流畅,你是否在手机上试试了你的新js? – Huangism