Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Смена изображений при прокрутке (https://javascript.ru/forum/misc/57178-smena-izobrazhenijj-pri-prokrutke.html)

Иван Федорович 22.07.2015 23:39

Смена изображений при прокрутке
 
Помогите пожалуйста! Нужен блок div который будет менять фоновое изображение в обе стороны при прокрутке страницы с большой периодичностью чтобы создавался эффект видеою

EmperioAf 23.07.2015 00:15

при прокрутке блок div должен быть на одном месте на экране?
фоновое изображение должно меняться из-за прокрутки или с большой периодичностью ?

Иван Федорович 23.07.2015 11:27

Блок должен быть зафиксирован на одном месте. Изображение должно меняться при прокрутке.

Иван Федорович 23.07.2015 15:55

Просто нужна смена изображений при прокрутке, скажем, через каждых 20px

EmperioAf 23.07.2015 16:02

Цитата:

Сообщение от Иван Федорович (Сообщение 381119)
Просто нужна смена изображений при прокрутке, скажем, через каждых 20px

Просто непонятно в чём проблема задания. Нужно повесить на window.onscroll (https://learn.javascript.ru/onscroll) функцию, в которой будет смена изображений в зависимости от положения ползунка(window.pageYOffset).

Иван Федорович 23.07.2015 18:57

Цитата:

Сообщение от EmperioAf (Сообщение 381121)
Просто непонятно в чём проблема задания.

Нужно чтобы при прокрутке страницы вверх/вниз в фиксированном блоке div изображения меняются в строгом порядке. Например: при прокрутке вниз порядок изображений 1 2 3, при прокрутке вверх порядок 3 2 1. EmperioAf, я новичок в JavaScript, поэтому просьба объяснить на примере решения, с комментариями, пожалуйста. :help:

EmperioAf 24.07.2015 15:33

в общем задача для меня оказалась гораздо сложнее чем изначально думал.

<!DOCTYPE html>
<html>
<head>
 <meta http-equiv="content-type" content="text/html; charset=utf-8" />
 <title>Спойлеры</title>
 <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<style>
.container{
    position: relative;
    width: 1000px;
    height: 3000px;
    border: 1px solid red;
}

.video {
    position: fixed;
    left: 100px;
    top: 10px;
    width: 400px;
    height: 250px;
    border: 1px solid green;
    background-image: url("http://360tv.ru/binfiles/images/20150424/ba10f44c.jpg");
    background-size: cover;
}
</style>
</head>
<body>
<div class="container">
     <div class="video"></div>
</div>
<input type="hidden" value="0">
<script>
    var images = ["http://360tv.ru/binfiles/images/20150424/ba10f44c.jpg","http://www.wallsbox.ru/images/original/dozhd-[1680x1050]-[3877171].jpg", "http://moimiri.ru/wp-content/gallery/2013year/2013_Sirost_90x80.jpg", "http://st.magazin-almaz-servis.ru/12/1531/460/syrost-v-kvartire-kak-izbavitsya-foto-2.jpg", "http://cs7002.vk.me/c7007/v7007062/8820/Snd9Gm9pv5k.jpg"];

window.onscroll = function(){
    var videoElem = document.querySelector('.video');
    var scrolled = window.pageYOffset || document.documentElement.scrollTop;
    var scrolledBefore = document.querySelector('input[type="hidden"]').value;
    document.querySelector('input[type="hidden"]').value = scrolled;
    var scrolledResult = scrolled - scrolledBefore;
    if (scrolledResult<0){
        var timeout = 200;
        for(var i = 4; i>=0; i--){
            setTimeout(
                (function(n){
                    return function(){
                    videoElem.style.backgroundImage = "url("+images[n]+")";
                    }
            })(i)
            ,timeout
            );
            timeout += 200;
        };
    }
    if (scrolledResult>0){
         timeout = 200;
        for(var i = 0; i < 5 ; i++){
            setTimeout(
                (function(n){
                    return function(){
                    videoElem.style.backgroundImage = "url("+images[n]+")";
                    }
            })(i)
            ,timeout
            );
            timeout += 200;
        };
    }
        
    }

</script>
</body>
</html>

рони 24.07.2015 15:50

EmperioAf,
вычислить максимальный скролл страницы - разделить на количество картинок - получили шаг - текущий скрол разделить на шаг - получить целое число - показать картинку под индексом == число - всё

EmperioAf 24.07.2015 15:55

Цитата:

Сообщение от рони (Сообщение 381365)
EmperioAf,
вычислить максимальный скролл страницы - разделить на количество картинок - получили шаг - текущий скрол разделить на шаг - получить целое число - показать картинку под индексом == число - всё

а если у него сайт огромный - такой как я и сделал .container{ height:3000px} ?

рони 24.07.2015 16:25

Цитата:

Сообщение от EmperioAf
а если у него сайт огромный - такой как я и сделал .container 3000px ?

а что это меняет? :-? или пусть ТС уточнит


Часовой пояс GMT +3, время: 05:34.