我創建了一個簡單的函數,負責倒轉滾動方向,但它看起來像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