Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 14.01.2014, 17:10
Новичок на форуме
Отправить личное сообщение для esergion Посмотреть профиль Найти все сообщения от esergion
 
Регистрация: 14.01.2014
Сообщений: 6

Скрыть плавающую ссылку "Наверх" если она ниже статичной [SOLVED]
Доброго времени.
На сайте в футере имеется ссылка "наверх":
$('#toUp').click(function(e) {
        e.preventDefault();
		$('body,html').animate({scrollTop: 0}, 500);
    });

Так как страница получается длинная, захотелось сделать еще плавающуюю ссылку с тем же функционалом. Когда находимся вверху страницы ссылка скрыта, так же хотелось бы ее скрывать если она опускается ниже уже имеющейся статичной ссылки. Взят jQuery-код с просторов интернета и немного доработан. Получилось следующее:
$(function(){
    	$.fn.scrollToTop=function(){
    		$(this).hide().removeAttr("href");
    		var scrollDiv=$(this);
    		var displayed=false;
    		$(window).scroll(function(){
    			if(($(window).scrollTop()=="0") || ($(scrollDiv).offset().top >= $('#toUp').offset().top)){
    				if (displayed==true){
    					$(scrollDiv).fadeOut("slow");
    					displayed=false;
    					console.log("off Плавающая кнопка офсет - " + $(scrollDiv).offset().top + " статика - "+$('#toUp').offset().top);
    				}
    			}else{
    				if (displayed==false){
    					$(scrollDiv).fadeIn("slow");
    					displayed=true;
    					console.log("On Плавающая кнопка офсет - " + $(scrollDiv).offset().top + " статика - "+$('#toUp').offset().top);
    				}
    			}
    		});
    		$(this).click(function(){
    			$("html, body").animate({scrollTop:0},"slow")
    		})
    	}
    });
    $(function() {$("#toUpSide").scrollToTop();});


Беда-печаль заключается в том, что когда плавающая ссылка находится ниже статичной она нормально фэйдАутится, но стоит в этой области поскролить страницу - эта злополучная ссылка начинает мигать (т.е. сначала включается и тут же выключается)..
Могут добры-молодцы воспомочь в такой проблеме?

Последний раз редактировалось esergion, 15.01.2014 в 15:43. Причина: Задача решена
Ответить с цитированием
  #2 (permalink)  
Старый 14.01.2014, 17:15
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Посмотрите в этой теме, может поможет
Появление/исчезновение элемента при прокрутке страницы JQuery
Ответить с цитированием
  #3 (permalink)  
Старый 15.01.2014, 09:11
Новичок на форуме
Отправить личное сообщение для esergion Посмотреть профиль Найти все сообщения от esergion
 
Регистрация: 14.01.2014
Сообщений: 6

Сообщение от Poznakomlus Посмотреть сообщение
Посмотрите в этой теме, может поможет
Появление/исчезновение элемента при прокрутке страницы JQuery
Ох и сильно Кунг-Фу ваше явоскриптское в той теме! Долго мне еще рассветы с закатами созерцать, дабы приблизится к такому мастерству.
Вот взял за пример ваш код и немного "приупростил" свое писание, получилось следующее для наглядности:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  footer{
    width: 100%;
    background-color: gray;
    height: 350px;
    position:absolute;
    top:1250px;
    left:0;
  }
#toUp {
	color: #111;
}
#toUpSide {
	position: fixed;
    bottom: 30px;
   right:30px;
}
  body{
     height: 1600px;
  }
</style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script>
    $('#toUp').click(function(e) {
        e.preventDefault();
		$('body,html').animate({scrollTop: 0}, 500);
    });
    $(function(){
    	$.fn.scrollToTop=function(){
    		$(this).hide().removeAttr("href");
    		var scrollDiv=$(this), displayed;
    		$(window).scroll(function(){
    			displayed = $(window).scrollTop()>=200 && $(scrollDiv).offset().top<=$('#toUp').offset().top;
    			if (displayed){
    				$(scrollDiv).fadeIn("slow");
    			}else{
    				$(scrollDiv).fadeOut("slow");
    			}
    		});
    		$(this).click(function(){
    			$("html, body").animate({scrollTop:0},"slow")
    		})
    	}
    });
    $(function() {$("#toUpSide").scrollToTop();});

  </script>
</head>
<body>
   <div id="content">Тут контент
   </div>
   <footer>
       <a href="#" id="toUp">Наверх</a>
       <a href="#" id="toUpSide">Наверх</a>
   </footer>
</body>
</html>


Попробуйте поскролить в тот момент, когда плавающая ссылка опускается ниже статической, будет мигать..
Предполагаю что проблема в логических операторах, видимо не так надобно проверять..
Ответить с цитированием
  #4 (permalink)  
Старый 15.01.2014, 12:20
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

Если кнопка наверх
http://jsfiddle.net/vlasenkofedor/YZsbK/
Ответить с цитированием
  #5 (permalink)  
Старый 15.01.2014, 13:59
Новичок на форуме
Отправить личное сообщение для esergion Посмотреть профиль Найти все сообщения от esergion
 
Регистрация: 14.01.2014
Сообщений: 6

Сообщение от Poznakomlus Посмотреть сообщение
Если кнопка наверх
http://jsfiddle.net/vlasenkofedor/YZsbK/
Красота то какая! Премного благодарен вам за столь удивительное для меня открытие!
Этим методом и воспользуюсь всенепременнейше, т.к. задачу он решает очень элегантно.
Но, к сожалению, вопрос про скрытие плавающего элемента, опускающегося ниже другого элемента, остается для меня открытым на сей день..
Ответить с цитированием
  #6 (permalink)  
Старый 15.01.2014, 14:13
Аватар для Vlasenko Fedor
Профессор
Отправить личное сообщение для Vlasenko Fedor Посмотреть профиль Найти все сообщения от Vlasenko Fedor
 
Регистрация: 13.03.2013
Сообщений: 1,572

http://learn.javascript.ru/play/seItt
так что-ли?
Ответить с цитированием
  #7 (permalink)  
Старый 15.01.2014, 15:40
Новичок на форуме
Отправить личное сообщение для esergion Посмотреть профиль Найти все сообщения от esergion
 
Регистрация: 14.01.2014
Сообщений: 6

Сообщение от Poznakomlus Посмотреть сообщение
http://learn.javascript.ru/play/seItt
так что-ли?
Именно так, сделал следующее:
<!DOCTYPE HTML>
<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  footer{
    width: 100%;
    background-color: gray;
    height: 350px;
    position:absolute;
    top:1250px;
    left:0;
  }
#toUp {
    color: #111;
}
#toUpSide {
    position: fixed;
    bottom: 30px;
   right:30px;
}
  body{
     height: 1600px;
  }
</style>
  <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
  <script>
    	//Нажатие "Наверх"
	$('#toUp').click(function(e) {
        e.preventDefault();
		$('body,html').animate({scrollTop: 0}, 500);
    });
    //Плавающая кнопка "Наверх"
    jQuery(function (f) {
    	var scrollToTopEl = f('#toUpSide'),
    	disableScrollEl = f('#toUp');
    	scrollToTopEl.hide();
    	f(window).scroll(function () {
    		scrollToTopEl['fade' + (f(this).scrollTop() > 200 && (disableScrollEl.offset().top - 500) > f(this).scrollTop() ? 'In' : 'Out')]();
    	});
    	scrollToTopEl.click(function(){
    		$("html, body").animate({scrollTop:0},"slow")
    	});
    })
  </script>
</head>
<body>
   <div id="content">Тут контент
   </div>
   <footer>
       <a href="#" id="toUp">Наверх</a>
       <a href="#" id="toUpSide">Наверх</a>
   </footer>
</body>
</html>


Плавающая ссылка исчезает когда (window).scrollTop() становится больше, чем оффсэт-500px у статичной ссылки.
Если сравнивать оффсэт плавающей и статичной - плавающая мигает при скролинге в области ниже статичной, как и ранее.
Вобщем задача решена, огромное спасибо вам, Poznakomlus, за терпение и содействие, да уродятся финики в саду вашем!
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск