Ответ 1
Я не вижу ничего плохого в вашем коде. Готов поспорить, что причиной является 2,1 МБ вашего изображения, размер которого изменяется от 2500 пикселей до ширины окна. Учтите, что браузер пытается "нарисовать" изображение и вычислить позицию для каждого значения прокрутки...
Я бы подошел к нему с фоновой позицией на css, но, несмотря на вашу проблему, проблема, похоже, сосредоточена на производительности. То, что вы делаете на JS, немного неэффективно, потому что сначала вы выбираете все теги '*[class^="prlx"]'
через них, а затем снова применяете к ним все в каждом цикле перерасчет позиции, снова просматривая их. Когда вы перебираете элементы, вы можете использовать элемент this
и применить к нему изменения. Сохранить $this для переменной - это просто не применять jQuery дважды к одному элементу и сохранять небольшие ресурсы, но в этом случае может быть не так важно.
Здесь, на моем ноутбуке, я не вижу его нервным. Попробуйте это и используйте меньшее изображение, чтобы узнать, улучшает ли он производительность.
jQuery(document).ready(function() {
jQuery(window).scroll(function() {
jQuery('*[class^="prlx"]').each(function(r) {
var $this = $(this);
var pos = $this.offset().top;
var scrolled = $(window).scrollTop();
$this.css('top', +(scrolled * 0.6) + 'px');
});
});
});
*[class^="prlx"] {
position: absolute;
width: 100%;
height: 300%;
top: 0;
left: 0;
z-index: -1;
background-size: 110%;
}
.prlx-2 {
background-image: url('http://www.roscodigitalmedia.co.uk/rosco/wp-content/uploads/2015/12/bigstock-Artist-Photographer-Retouches-91840682.jpg');
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div class="container-fluid homeHeader">
<div class="prlx-2">
</div>
</div>