Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   !!!! Изменение цвета при скролле (https://javascript.ru/forum/dom-window/39575-izmenenie-cveta-pri-skrolle.html)

Alim 04.07.2013 17:08

!!!! Изменение цвета при скролле SOS!!!
 
В общем вся проблема в том что скрипт некорректно работает во время скролла

т.е во время скролла цвета блоков не меняются

а вся идея в том чтобы цвета плавно менялись во время скроллинга

http://learn.javascript.ru/play/EGRaKb



<!DOCTYPE HTML>
<html>
<head>
	<meta http-equiv="content-type" content="text/html" />
	<meta name="author" content="admin" />
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
    <title>Untitled - 1</title>
    <style>
   .active{
        
    }
dbody {
	min-height: 750px;
}
    .body div{
        display: block;
        text-align: center;
        border: 10px solid #000;
        height: 250px;
        width: 70%;
        padding-top: 200px;
    }
    .menu{
        position: fixed;
        right: 20px;
        top: 20px;
        border: 2px solid #000;
    }
    </style>
</head>
<body>
<ul class="menu">
	<li><a href="#1">11111</a></li>
	<li><a href="#2">22222</a></li>
	<li><a href="#3">33333</a></li>
	<li><a href="#4">44444</a></li>
	<li><a href="#5">55555</a></li>
	<li><a href="#6">66666</a></li>
</ul>
<div class="body">
<a name="1" ></a><br /><div id="f1">1</div>
<a name="2" ></a><br /><div id="f2">2</div>
<a name="3" ></a><br /><div id="f3">3</div>
<a name="4" ></a><br /><div id="f4">4</div>
<a name="5" ></a><br /><div id="f5">5</div>
<a name="6" ></a><br /><div id="f6">6</div>
</div>
<script>

$(document).ready(function(){
    var link = window.location.hash.replace("#","");
    $('.body a[name="'+link+'"]').next().next().addClass('active');
    $('.menu a').click(function(){
    var _name = $(this).attr("href");            
    document.location.href = _name;
    location.reload();      
});});
$(function() {
$(window).scroll(function(){
    

var distanceTop1 = $('#f1').offset().top - 450;
var distanceTop2 = $('#f2').offset().top - 450;
var distanceTop3 = $('#f3').offset().top - 450;
var distanceTop4 = $('#f4').offset().top - 450;
var distanceTop5 = $('#f5').offset().top - 450;
var distanceTop6 = $('#f6').offset().top - 450;

if  ($(window).scrollTop() > distanceTop1){
$('#f2,#f3,#f4,#f5,#f6').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f1').animate({ backgroundColor: "green"}, 500);}
else
$('#f1').stop(true).animate({ backgroundColor: "none" }, 500);

if  ($(window).scrollTop() > distanceTop2){
$('#f1,#f3,#f4,#f5,#f6').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f2').animate({ backgroundColor: "green"}, 500);}
else
$('#f2').stop(true).animate({ backgroundColor: "none" }, 500);

if  ($(window).scrollTop() > distanceTop3){
$('#f2,#f1,#f4,#f5,#f6').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f3').animate({ backgroundColor: "green"}, 500);}
else
$('#f3').stop(true).animate({ backgroundColor: "none" }, 500);

if  ($(window).scrollTop() > distanceTop4){
$('#f2,#f3,#f1,#f5,#f6').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f4').animate({ backgroundColor: "green"}, 500);}
else
$('#f4').stop(true).animate({ backgroundColor: "none" }, 500);

if  ($(window).scrollTop() > distanceTop5){
$('#f2,#f3,#f4,#f1,#f6').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f5').animate({ backgroundColor: "green"}, 500);}
else
$('#f5').stop(true).animate({ backgroundColor: "none" }, 500);

if  ($(window).scrollTop() > distanceTop6) {
$('#f2,#f3,#f4,#f5,#f1').stop(true).animate({ backgroundColor: "none"}, 500);
$('#f6').animate({ backgroundColor: "green"}, 500);
}
else
$('#f6').stop(true).animate({ backgroundColor: "none" }, 500);
});
});

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


ПОМОГИТЕ!!! :help:

Alim 04.07.2013 17:54

:help: :help: :help: :help: :help: :help: :help: :help: :help: :help: :help: :help:

danik.js 04.07.2013 18:25

Чет там кода слишком много. Удали дубли, а то вломы разбираться..

Alim 04.07.2013 18:41

danik.js,
В принципе весь код слизан отсюда http://dnzl.ru/view_post.php?id=188

Только вот это сам кое-как нацарапал (ну почти сам) и с этим кодом вроде бы проблем нет
$(document).ready(function () {
        var link = window.location.hash.replace("#", "");
        $('.body a[name="' + link + '"]').next().next().addClass('active');
        $('.menu a').click(function () {
          var _name = $(this).attr("href");
          document.location.href = _name;
          location.reload();
        });
      });


Без дублей

$(function () {

        $(window).scroll(function () {


          var distanceTop1 = $('#f1').offset().top - 450;

          if ($(window).scrollTop() > distanceTop1) {
         
            $('#f1').animate({
              backgroundColor: "green"
            }, 500);
          } else $('#f1').stop(true).animate({
            backgroundColor: "none"
          }, 500);
        });
      });

skrudjmakdak 04.07.2013 19:51

а в логи ошибки валятся?

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

...
var distanceTop1 = $('#f1').offset().top - 450;
 console.log(distanceTop1);
console.log(($(window).scrollTop() > distanceTop1) ? 'условие выполнилось' : 'условие не выполнилось');
if ($(window).scrollTop() > distanceTop1) {
...

Alim 04.07.2013 20:36

В принципе всё работает только надо было чтобы цвета блоков менялись при скроллинге а не только после его остановки

(в логах ошибок нет)

Alim 04.07.2013 20:37

Может есть какая-то библиотека jq?

bes 04.07.2013 20:57

<script src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jqueryui/1/jquery-ui.min.js"></script>
<style>
dbody {
	min-height: 750px;
}
div {
	text-align: center;
	border: solid 1px lightgreen;
	width: 80%;
	height: 200px;
	margin: 2em;
}
</style>
<div class="f">1</div>
<div class="f">2</div>
<div class="f">3</div>
<div class="f">4</div>
<div class="f">5</div>
<div class="f">6</div>
<script>
jQuery(function ($) {
	$(window).scroll(function(){
		$(".f").each(function() {
			if ($(this).offset().top < $(window).scrollTop() + 50) {
				$(this).animate({backgroundColor: "green"}, 200);
			} else {
				$(this).animate({backgroundColor: "none"}, 200);
			}
		});
	});
});
</script>

ну и подумай как это использовать, чтобы не было each

skrudjmakdak 04.07.2013 21:21

http://www.xiper.net/examples/js-plu...lor/color.html
вот пример. но вот почему то jquery.color.js с jquery-1.10.1.min.js дружить не хочет..

Alim 04.07.2013 21:29

Огромное спасибо за то что потрудились написать скрипт, однако надобно чтобы когда блок в центре экрана он окрашивался а у других цвет изчезал

(всё это дело для интернет магазина, для страницы представления товаров)

Вот уже целый день бьюсь головой об стену:(

ссори за то что не объяснил суть проблемы


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