Горизонтальная прокрутка параллакса с нуля — без плагина (jQuery)

Кто-нибудь знает, где я могу найти учебник о том, как сделать горизонтальную прокрутку параллакса с помощью нуля формы js (т.е. без плагина)? Или можете предоставить мне пример

Я потратил кучу времени на гугление, но смог найти только учебные пособия с использованием плагинов.

Причина, по которой я хочу сделать это с нуля, заключается в том, что я хочу получить полное представление о том, как на самом деле работает параллакс.

Я не возражаю против использования библиотеки jQuery, я просто не хочу полагаться на подключаемый модуль для получения эффекта.


person zero    schedule 05.09.2012    source источник
comment
Плагин — это не более чем фрагмент кода, и когда вы говорите, что не хотите полагаться на один из них, это не имеет особого смысла. Если целью является обучение, то почему бы просто не посмотреть исходный код плагинов и не следовать найденным руководствам?   -  person Wesley Murch    schedule 05.09.2012
comment
@WesleyMurch правда, но то, что вы упомянули, - это только две части моей трехсторонней атаки. Я также анализировал плагины, но много раз (как в этой ситуации) они могут быть похожи на попытку собрать огромный кубик Рубикса (плохие комментарии, спагетти-код, универсальный код и т. д.). .) то, что мне нужно, - это объяснение концепции, чтобы наряду с тем, что я узнал из разбора плагинов и учебных пособий на основе плагинов, я мог получить более существенное понимание эффекта, а не понимание ботинка по кусочкам.   -  person zero    schedule 05.09.2012
comment
Из интереса, почему вы изменили принятый ответ на Шмидти? Насколько мне известно, он просто взял мой код и разместил его на jsfiddle...   -  person Pez Cuckow    schedule 05.09.2012
comment
@PezCuckow, это странно, я проверил ваш ответ и покинул сайт. его ответ не должен был быть проверен, я проверю ваш снова.   -  person zero    schedule 05.09.2012


Ответы (3)


Простое руководство

См.: http://www.egstudio.biz/easy-parallax-with-jquery/

Вы можете применить этот код к 5/6 элементам (с разными scaling) и создать отличный простой эффект паралакса на основе пользовательской мыши.

Вот пример, благодаря Shmiddty: http://jsfiddle.net/4kG6s/1

«А вот та же установка с кодом из ответа @PezCuckow»

Под масштабированием я подразумеваю что-то вроде этого (отредактировано сверху)

var strength1 = 5;
var strength2 = 10;
var strength3 = 15;
$("html").mousemove(function(e){
    var pageX = e.pageX - ($(window).width() / 2);
    var pageY = e.pageY - ($(window).height() / 2);
    var newvalueX = ;
    var newvalueY = height * pageY * -1;
    $('item1').css("background-position", (strength1 / $(window).width() * pageX * -1)+"px "+(strength1  / $(window).height() * pageY * -1)+"px");
    $('item2').css("background-position", (strength2 / $(window).width() * pageX * -1)+"px "+(strength2  / $(window).height() * pageY * -1)+"px");
    $('item3').css("background-position", (strength3 / $(window).width() * pageX * -1)+"px "+(strength3  / $(window).height() * pageY * -1)+"px");
});

Без библиотеки, такой как jQuery, эффект параллакса было бы довольно сложно реализовать, вам нужно было бы вручную реализовать всю анимацию, а не использовать функции, предоставляемые библиотекой.

При этом, однако, приблизительное руководство выглядит примерно так, как показано ниже, реализует очень плохой эффект параллакса, когда фоны движутся с разной скоростью.

CSS:

#bg1, #bg2, #bg3 {
    background-image:url('stars.gif');
    height: 100%;
    width: 100%;
    position: absolute;
    left: 100%;
}

HTML:

<div id="bg1"></div>
<div id="bg2"></div>
<div id="bg3"></div>

JS:

while(true) {
  document.getElementById('bg1').style.left = (document.getElementById('bg1').style.left) - 4 + 'px';
  document.getElementById('bg2').style.left = (document.getElementById('bg2').style.left) - 10 + 'px';
  document.getElementById('bg3').style.left = (document.getElementById('bg3').style.left) - 20 + 'px';
}
person Pez Cuckow    schedule 05.09.2012
comment
я не против использования библиотеки (я обновил свой вопрос, чтобы отразить это), я просто хочу получить общее представление о том, как это работает без плагина - person zero; 05.09.2012

Вот грубо говоря простая реализация прокрутки параллакса: http://jsfiddle.net/4kG6s/

function AnimateMe(){
    $("#background").css("background-position", "-=2");
    $("#middleground").css("background-position", "-=4");
    $("#foreground").css("background-position", "-=8");    
}

setInterval(AnimateMe, 100);

Хотя эта реализация анимирует положение фона, концепция остается прежней. Передний план движется пропорционально быстрее, чем фон, и есть слои, наложенные друг на друга. Концептуально это настолько просто, насколько это возможно.

person Shmiddty    schedule 05.09.2012
comment
А вот та же установка с кодом из ответа @PezCuckow: jsfiddle.net/4kG6s/1 - person Shmiddty; 05.09.2012

Код из ответа @PezCuckow, но без jQuery (т.е. исключительно в java-скрипте): http://jsfiddle.net/Gurmeet/s26zxcnf/1/

HTML:

<div onmousemove="update(event)">
    <div id="background">
    </div>
    <div id="middleground">
    </div>
    <div id="foreground">
    </div>
</div>

JS:

var strength1 = 50;
var strength2 = 100;
var strength3 = 200;

var background = document.getElementById('background');
var middleground = document.getElementById('middleground');
var foreground = document.getElementById('foreground');

function update(e){
var pageX = e.clientX - (window.innerWidth / 2);
var pageY = e.clientY - (window.innerHeight / 2);
background.style.backgroundPosition = (strength1 / window.innerWidth * pageX * -1)+"px "+(strength1  / window.innerHeight * pageY * -1)+"px";
middleground.style.backgroundPosition = (strength2 / window.innerWidth * pageX * -1)+"px "+(strength2  / window.innerHeight * pageY * -1)+"px";
foreground.style.backgroundPosition = (strength3 / window.innerWidth * pageX * -1)+"px "+(strength3  / window.innerHeight * pageY * -1)+"px";

};

person Gurmeet Singh    schedule 07.10.2014