这是我第一个与视差效果相关的项目。我试图实现视差库,但它们在 mac safari 上无法正常工作,滚动不流畅。所以我尝试实现我在谷歌上找到的自定义代码,它比库工作得更好,但滚动仍然不流畅。mac safari 上的主要滚动效果。
注意:- 网站是用 PHP 制作的,页面滚动时带有视差和动画 (wow.js) 的单页网站。网站上的内容很大,都是用“section”标签实现的图片。所以页面上有近 10 个不同的“部分”标签,包含大约 10 个不同的“部分”标签。每个“部分”标签 10 张图片。页面大小超过 45 MB(播放 2 个大小为 22 MB 的视频)。
尝试过的解决方案:-在此之前所有图像都是PNG格式,然后我将它们转换为JPG格式并压缩它们。所有图像的分辨率都更高,其中一些甚至是 2500*1800。不同“部分”上的四个不同视差图像,一个“部分”上的一个视差图像。
我正在使用的当前视差脚本:-
var scrolled = $(window).scrollTop()
$('.parallax').each(function(index) {
var imageSrc = $(this).data('image-src')
var imageHeight = $(this).data('height')
$(this).css('background-image','url(' + imageSrc + ')')
$(this).css('height', imageHeight)
var initY = $(this).offset().top
var height = $(this).height()
var diff = scrolled - initY
var ratio = Math.round((diff / height) * 100)
$(this).css('background-position','center ' + parseInt(-(ratio * 1.5)) + 'px')
})
$(window).scroll(function() {
var scrolled = $(window).scrollTop();
$('.parallax').each(function(index, element) {
var initY = $(this).offset().top;
var height = $(this).height();
var endY = initY + $(this).height();
var visible = isInViewport(this);
if(visible) {
var diff = scrolled - initY;
var ratio = Math.round((diff / height) * 100);
$(this).css('background-position','center ' + parseInt(-(ratio * 1.5)) + 'px');
}
});
});
function isInViewport(node) {
var rect = node.getBoundingClientRect();
return (
(rect.height > 0 || rect.width > 0) &&
rect.bottom >= 0 &&
rect.right >= 0 &&
rect.top <= (window.innerHeight || document.documentElement.clientHeight) &&
rect.left <= (window.innerWidth || document.documentElement.clientWidth)
);
}
任何人,请帮助!