Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Паралакс, что-то глючит (https://javascript.ru/forum/jquery/52674-paralaks-chto-glyuchit.html)

xTODx 30.12.2014 13:35

Паралакс, что-то глючит
 
Всем привет, сделал вот такой простой скрипт для паралакса, но такая проблема, если назад поднимаю скролл вверх, то выходит криво.
$(document).ready(function(){
	$(window).scroll(function(){
               var scrolling = window.pageYOffset || docElem.scrollTop || body.scrollTop ;
               if(scrolling>=$('.paralax').position().top){
	            $('.paralax').css({'background-position': '0px '+((scrolling-101)*0.7)+'px'});
               }else{
	             $('.paralax').css({'background-position': '0px 0px'});
               }
        });
});


Как исправиьт эту штуку?

рони 30.12.2014 14:32

xTODx,
сделали бы полноценный макет

xTODx 30.12.2014 15:11

html скинуть?
я нашёл ошибку, но не понимаю чего, в вверхней точке scrolling не обнуляется(((
функция скролл не выполняется если верхяя точка(

рони 30.12.2014 15:14

Цитата:

Сообщение от xTODx
scrolling

а почему не jquery?

рони 30.12.2014 15:23

Цитата:

Сообщение от xTODx
docElem.

Цитата:

Сообщение от xTODx
body.

это что?
почему не
var scrolling = $(window).scrollTop();

xTODx 30.12.2014 15:33

оп, и всё работает)
не бумал что это так сильно решает!)
Благодарю!

рони 30.12.2014 15:40

xTODx,
то есть то что переменные никак не были определены это мелочи :cray:

xTODx 30.12.2014 15:44

та они определены, просто не весь код скинул!)
но простите за глупости, я в js недавно)

xTODx 30.12.2014 15:50

Можете ещё помочь? в классе есть несколько элементов .paralax
как перебрать каждый, и для каждого прооверить условие?
Вот код той функции, паралакса.
сделано для того, чтобы пока не долистаю до нужного элемента, паралакс не работал.
но, оно определяет по первому $('.paralax').
я понимаю что их нужно перебрать, each?
function paralax(scrol){
	if(scrol>$('.paralax').position().top){
				$('.paralax').css({'background-position': '0px '+(scrol*0.7-$('.paralax').position().top)+'px'});
	}else{
				$('.paralax').css({'background-position': '0px 0px'});
	}
}

рони 30.12.2014 16:32

Цитата:

Сообщение от xTODx
each?

да

xTODx 30.12.2014 16:35

поможете пожалуйста помочь с этим делом, а то у меня что-то не вышло.
итог, ничего не работает
$('.paralax').each(arr,function(scrol){
	if(scrol>this.position().top){
				this.css({'background-position': '0px '+(scrol*0.7)+'px'});
	}else{
				this.css({'background-position': '0px 0px'});
	}
	})

рони 30.12.2014 19:09

Паралакс paralax
 
xTODx, макет внизу это то что нужно было сделать вам, чтоб было понятно что и где не получается.
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  html, body{
      height: 100%;
      margin: 0px;
      padding: 0px;
  }
  div{
     background: 0px 0px ;
     height: 100%;
     width: calc(100%-12px);
     border: rgb(102, 0, 255) 1px solid ;
      background-size: cover;
  }

  div:nth-of-type(1) {
        background-image: url(http://www.unitrade-bg.com/userfiles/image/alps/lake-mountain-the-alps_1600x1200_92573.jpg);
  }
  div:nth-of-type(2) {
        background-image: url(http://cdn.dipity.com/uploads/events/0ff5b92dffa076352a2370a741f5e54f_1M.png);
  }
  div:nth-of-type(3) {
        background-image: url(http://usiter.com/uploads/20101010/gory_priroda_9570.jpg);
  }
  div:nth-of-type(4) {
        background-image: url(http://www.krasfun.ru/images/2014/2/f7561_original.jpg);
  }
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {
    $(window).scroll(function() {
        var scrolling = $(window).scrollTop();
        $(".paralax").each(function() {
            if (scrolling > $(this).offset().top) {
                var y = scrolling - $(this).offset().top;
                $(this).css({
                    "backgroundPositionY": y + "px"
                })
            } else $(this).css({
                "backgroundPositionY": "0px"
            })
        })
    })
});
  </script>
</head>
<body>
<div class="paralax"></div>
<div class="paralax"></div>
<div class="paralax"></div>
<div class="paralax"></div>
</body>
</html>

xTODx 31.12.2014 10:55

Понял, простите пожалуйста! исправлюсь! обещаю!
спасибо за всё!

helgajijka 19.11.2015 01:12

Всем привет! Можно спросить, подскажите, а как можно посчитать, если нужно background-position смещать из точки 50% 50%,
что тогда (scrol*0.7-$('.paralax').position().top)/100, я так пробую но смещение получается какое-то маленькое, не очень заметное, и в разных блоках разные значения этого смещения, помогите разобраться пожалуйста)
Вот мой вариант кода
function paralaxBg(){
        $(window).scroll(function(){
            var windowScrollTop = $(this).scrollTop(),
                scrollSection = $('.paralax');
            scrollSection.each(function(){
                if(windowScrollTop>$(this).position().top){
                    var scrollValue = 50 - (windowScrollTop*7-$(this).position().top)/100;
                    $(this).css({'background-position': '50% '+scrollValue+'%'});
                }else{
                    $(this).css({'background-position': '50% 50%'});
                }
                if(windowScrollTop>$(this).next().position().top){
                    $(this).css({'background-position': '50% 50%'});
                }
            });
        });
    }


Спасибо заранее за ответы)

рони 19.11.2015 01:27

helgajijka,
макет бы полностью

helgajijka 19.11.2015 09:34

рони,

У меня тут в принципе много всего, но по сути макет в структуре как и у Вас, просто идут блоки-секции, некоторые из них, начиная с header имеют фоновый картинки, проблема именно с блоком header, есть условие, что его фоновая картинки должна быть изначально в положении 50% 50%, и отсюда считать смещение.
Я уже сделала такой вариант, паралакс столько для header в скрипте, а для остальных блоков просто с помощью background-attachment: fixed, но все равно как-то в header получается еле заметный паралакс)) Пробовала менять значения, но пока не удалось подобрать нужное))

Если отбросить лишнее в моем макете, что не касается данного вопроса, то получается как-то так.
Правда, простите, не знаю как сделать, как у Вас, чтобы рабочий пример размещать, чтобы его можно было запустить, плюс фоток в блоках нет, чтобы тоже просмотреть)
<!DOCTYPE HTML>
<html>
<head>
  <title>Template</title>
  <meta charset="utf-8">
  <style type="text/css">
  html, body{
      height: 100%;
      margin: 0px;
      padding: 0px;
  }
  .header{
    position: relative;
    height: 620px;
    background-image: url("../images/header.jpg");
    background-repeat: no-repeat;
    background-size: cover;
    background-position: 50% 50%;
  }
.section-form{
    background: url("../images/section-form-bg.jpg") 50% 50% no-repeat;
    background-size: cover;
    background-attachment: fixed;
}
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {

        $(window).scroll(function(){
            var windowScrollTop = $(this).scrollTop(),
                scrollSection = $('.paralax');            
                if(windowScrollTop>scrollSection .position().top){
                    var scrollValue = 50 - (windowScrollTop*7-scrollSection .position().top)/100;
                    scrollSection .css({'background-position': '50% '+scrollValue+'%'});
                }else{
                    scrollSection .css({'background-position': '50% 50%'});
                }
                if(windowScrollTop>scrollSection .next().position().top){
                    scrollSection .css({'background-position': '50% 50%'});
                }         
        });
});
  </script>
</head>
<body>
<header class="header paralax"></div>
<div class="section-promo-block1"></div>
<div class="section-promo-block2"></div>
<div class="section-form"></div>
<div class="section-promo-block3"></div>
<footer></footer>
</body>
</html>

Спасибо за помощь!

рони 19.11.2015 09:44

helgajijka,
[HTML run height=700][/HTML]

и что в паралаксе неустраивает?
<!DOCTYPE HTML>
<html>
<head>
  <title>Template</title>
  <meta charset="utf-8">
  <style type="text/css">
  html, body{
      height: 100%;
      margin: 0px;
      padding: 0px;
  }
  .header{
    position: relative;
    height: 620px;
    background-image: url("http://javascript.ru/forum/images/ca_serenity/misc/logo.gif");
    background-repeat: no-repeat;
    background-size: cover;
    background-position: 50% 50%;
  }
.section-form{
    background: url("../images/section-form-bg.jpg") 50% 50% no-repeat;
    background-size: cover;
    background-attachment: fixed;
}
div{
     background-position: 50% 50%;
     height: 100%;
     width: calc(100%-12px);
     border: rgb(102, 0, 255) 1px solid ;
     background-size:  cover;
  }
div:nth-of-type(1) {
        background-image: url(http://www.unitrade-bg.com/userfiles/image/alps/lake-mountain-the-alps_1600x1200_92573.jpg);
  }
  div:nth-of-type(2) {
        background-image: url(http://cdn.dipity.com/uploads/events/0ff5b92dffa076352a2370a741f5e54f_1M.png);
  }
  div:nth-of-type(3) {
        background-image: url(http://usiter.com/uploads/20101010/gory_priroda_9570.jpg);
  }
  div:nth-of-type(4) {
        background-image: url(http://www.krasfun.ru/images/2014/2/f7561_original.jpg);
  }
  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {

        $(window).scroll(function(){
            var windowScrollTop = $(this).scrollTop(),
                header= $('.header');
                if(windowScrollTop>header.position().top){
                    var scrollValue = 50 - (windowScrollTop*7-header.position().top)/100;
                    header.css({'background-position': '50% '+scrollValue+'%'});
                }else{
                    header.css({'background-position': '50% 50%'});
                }
                if(windowScrollTop>header.next().position().top){
                    header.css({'background-position': '50% 50%'});
                }
        });
});
  </script>
</head>
<body>
<header class="header paralax"></header>
<div class="section-promo-block1"></div>
<div class="section-promo-block2"></div>
<div class="section-form paralax"></div>
<div class="section-promo-block3"></div>
<footer></footer>
</body>
</html>

helgajijka 19.11.2015 21:47

рони,
Спасибо большое Вам, что уделяете моим вопросам внимание, не перестану Вас благодарить за Ваше участие и помощь!
По поводу паралакса, спасибо также, что помогли оформить код.
У меня тут проблема образовалась именно с блоком header, проблема под названием - дизайнер))
Его требование, чтобы картинка позиционировалась по центру на любых разрешениях экрана,
поэтому я не могу поставить блоку header background-attachment: fixed, иначе он ее тянет на разрешениях по разному,
При этом условии нужно сделать паралакс фона, но также чтобы он смотрелся на разных разрешениях одинаково.
При таком вычислении как в данном коде это тоже не получается. Думаю у меня вообще не получится реализовать его задание)

Самое интересное предложила еще один вариант, когда идет transform текста в блоке и этот тоже не устраивает, даже не знаю что ему сказать))

Вариант паралакса с лого текстом
<!DOCTYPE HTML>
<html>
<head>
  <title>Template</title>
  <meta charset="utf-8">
  <style type="text/css">
  html, body{
      height: 100%;
      margin: 0px;
      padding: 0px;
  }
  .header{
    position: relative;
    height: 620px;
    background-image: url("http://javascript.ru/forum/images/ca_serenity/misc/logo.gif");
    background-repeat: no-repeat;
    background-size: cover;
    background-position: 50% 50%;
  }
 .section-promo-block1{
     height: 1000px;
     background:  #333;
  }
 .logo{
  padding: 200px 0 0;
  font-size: 50px;
  color: #fff;
  text-align: center;
 }


  </style>
  <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
  <script>
$(function() {

        $(window).scroll(function(){
            var windowScrollTop = $(this).scrollTop(),
                header= $('.header'),
                logo = $('.logo');
                if(windowScrollTop>header.position().top){                    
                    logo.css({"transform": "translate(0px, "+ windowScrollTop/2 +"px)"});
                }else{
                    logo.css({"transform": "none"});
                }
                if(windowScrollTop>header.next().position().top){
                    logo.css({"transform": "none"});
                }
        });
});
  </script>
</head>
<body>
<header class="header paralax">
   <div class="logo">Это логотип странички</div>
</header>
<div class="section-promo-block1"></div>
<footer></footer>
</body>
</html>

рони 19.11.2015 22:00

helgajijka,
непонял ничего ...
возможно вам нужно это
.header{
    position: relative;
    height: 620px;
    background-image: url("http://javascript.ru/forum/images/ca_serenity/misc/logo.gif");
    background-repeat: no-repeat;
    background-size:  contain;
    background-position: center;
  }

helgajijka 19.11.2015 22:37

простите что я так все замудрено пыталась объяснить) но мне изложить сложно эти все требования. Фон должен растягиваться на всю ширину, нужен именно cover, но не сдвигаться при разной ширине экрана. Ну да ладно, будем искать какой-то компромисс, а то я и сама уже запуталась и Вас запутала.
Еще раз спасибо за помощь!

рони 20.11.2015 02:55

helgajijka,
ссылки на тему
https://codyhouse.co/demo/page-scrol.../parallax.html
https://codyhouse.co/demo/pull-out-i...ect/index.html
http://codyhouse.co/demo/fixed-backg...ect/index.html
https://codyhouse.co/demo/alternate-...und/index.html

helgajijka 21.11.2015 15:55

рони,
Спасибо Вам еще раз!
Я тут закопалась немного, и в итоге посмотрела Ваши ссылки, только сейчас))
Все таки хочу выложить как в нашем случае пришлось сделать, так, чтобы дизайнеру понравилось)) вообще решение оказалось на сss.

<!DOCTYPE HTML>
<html>
<head>
  <title>Template</title>
  <meta charset="utf-8">
  <style type="text/css">
  html, body{
      height: 100%;
      margin: 0px;
      padding: 0px;
  }
  .logo-block{
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    width: 100%;
    height: 620px;
    background-image: url("http://javascript.ru/forum/images/ca_serenity/misc/logo.gif");
    background-repeat: no-repeat;
    background-size: cover;
    background-position: 50% 50%;
    z-index: 1;
  }
.wrapper{
    position: relative;
    min-height: 100%;
    height: auto;
    padding-top: 620px;
    z-index: 100;
}
.logo-text{
    position: absolute;
    top: 0;
    left: 10%;   
    background-color: transparent;
}
 .logo{
  padding: 200px 0 0;
  font-size: 50px;
  color: #fff;
  text-align: center;
 }
 .section-promo-block{
     height: 1000px;
     background:  #333;
  }

  </style>
</head>
<body>
   <div class="logo-block"></div>
     <div class="wrapper">
        <div class="logo-text">
             <div class="logo">
                 <h1>Промо заголовок</h1>
             </div>           
        </div>
       <div class="section-promo-block"></div>
        <footer></footer>
     </div>
</body>
</html>

рони 21.11.2015 16:05

helgajijka,
:)


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