Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 15.02.2013, 20:54
Кандидат Javascript-наук
Отправить личное сообщение для Mateus Посмотреть профиль Найти все сообщения от Mateus
 
Регистрация: 06.12.2012
Сообщений: 100

Изменение класса в зависимости от положения дива
Доброго времени суток!
Данная функция должна менять класс элементов с "like_box" на "like_box_fixed". Первый имеет позицию relative, второй fixed. Но проблема в том, что одна функция должна менять классы у всех дивов, как только окно опуститься до него. Надеюсь на Вашу помощь, заранее благодарен.

$(function() {
		  var likeboxElem = document.getElementById('like_box');
		var offset = $("#like_box").offset();
		var topPadding = 30;
		$(window).scroll(function() {
			if ($(window).scrollTop() > offset.top) {
				
				  likeboxElem.className = "like_box";
			}
			else {
				likeboxElem.className = "like_box_fixed";
				;};});
			
	});
Ответить с цитированием
  #2 (permalink)  
Старый 16.02.2013, 21:37
Интересующийся
Отправить личное сообщение для VHS1980 Посмотреть профиль Найти все сообщения от VHS1980
 
Регистрация: 21.04.2010
Сообщений: 13

function getCoords(elem) {
    var box = elem.getBoundingClientRect();

    var body = document.body;
    var docElem = document.documentElement;

    var scrollTop = window.pageYOffset || docElem.scrollTop || body.scrollTop;
    var scrollLeft = window.pageXOffset || docElem.scrollLeft || body.scrollLeft;

    var clientTop = docElem.clientTop || body.clientTop || 0;
    var clientLeft = docElem.clientLeft || body.clientLeft || 0;

    var top  = box.top +  scrollTop - clientTop;
    var left = box.left + scrollLeft - clientLeft;

    return { top: Math.round(top), left: Math.round(left) };
}

function isVisible(elem) {

	var coords = getCoords(elem);
	var windowTop = window.pageYOffset || document.documentElement.scrollTop;
	var windowBottom = windowTop + document.documentElement.clientHeight;

	coords.bottom = coords.top + elem.offsetHeight;

	// верхняя граница elem в пределах видимости ИЛИ нижняя граница видима
	var topVisible = coords.top > windowTop && coords.top < windowBottom;
	var bottomVisible = coords.bottom < windowBottom && coords.bottom > windowTop;

	return topVisible || bottomVisible;
}

function showVisible() {
	var likeboxElem = document.getElementById('like_box');
		if (isVisible(likeboxElem)) {
			likeboxElem.className = "like_box_fixed";
		}
}

window.onscroll = showVisible


Соответственно в функции showVisible пилите то, что хотите.

Последний раз редактировалось VHS1980, 16.02.2013 в 21:39.
Ответить с цитированием
  #3 (permalink)  
Старый 16.02.2013, 23:04
Новичок на форуме
Отправить личное сообщение для asmprog Посмотреть профиль Найти все сообщения от asmprog
 
Регистрация: 15.02.2013
Сообщений: 9

Классически это делают так :$('div:eq(1)').animate({top:123px},function(){$('div':not($(this))).addClass('такой-то'))}')СИНТАКСИС исправь как нужно(Дримвивер высвечивает синтаксис как Ворд ошибки в тексте)

Последний раз редактировалось asmprog, 16.02.2013 в 23:07.
Ответить с цитированием
  #4 (permalink)  
Старый 17.02.2013, 14:15
Кандидат Javascript-наук
Отправить личное сообщение для Mateus Посмотреть профиль Найти все сообщения от Mateus
 
Регистрация: 06.12.2012
Сообщений: 100

Я так подумал и понял, что совсем не правильно объяснил проблему. Попробовал отобразить желаемый результат на картинке. На одной странице есть несколько дивов с классом like_box, по мере того, как див появляется в поле зрения, его класс меняется на like_box_fixed , но он не должен выходить за рамки большего дива (parent).
Ответить с цитированием
  #5 (permalink)  
Старый 17.02.2013, 14:21
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

Скроллинг клавишами и липкие блоки
Перемещение блока при скроллинге
Ответить с цитированием
  #6 (permalink)  
Старый 17.02.2013, 14:26
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

А причем здесь
Сообщение от Mateus
Серверные языки и технологии
?
Ответить с цитированием
  #7 (permalink)  
Старый 17.02.2013, 14:39
Кандидат Javascript-наук
Отправить личное сообщение для Mateus Посмотреть профиль Найти все сообщения от Mateus
 
Регистрация: 06.12.2012
Сообщений: 100

Deff, как всегда - спасибо. Липкие блоки именно то, что нужно.
danik.js, да, думаю ты прав, не при чем.
Ответить с цитированием
  #8 (permalink)  
Старый 17.02.2013, 14:49
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

1) Не jQuery
2) Не кроссбраузерно
3) Просто демка.

<style>
    div{
        height: 50px;
        margin: 100px 0;
        border: 1px dotted gray;
    }
    span{
        position: fixed;
        top: 10px;;
        right: 10px;
        padding: 10px;
        background: rgba(0,0,0,0.8);
        color: white;
        text-shadow: 1px white;
        box-shadow: 0 0 10px rgba(0,0,0,0.5);
    }
</style>
<span></span>
<div>Block 1</div>
<div>Block 2</div>
<div>Block 3</div>
<script>
var blocks = document.getElementsByTagName('div');
var span = document.getElementsByTagName('span').item(0);


function update() {
    var messages = [];
    for (var i=0; i < blocks.length; i++) {
        var rect = blocks[i].getBoundingClientRect();
        var visible = rect.bottom > 0 && rect.top < window.innerHeight;
        messages[i] = 'Блок ' + (i+1) + (visible ? ' видим' : ' невидим');
    }
    span.innerHTML = messages.join('<br>');
}

window.addEventListener('scroll', update);
update();
</script>

Последний раз редактировалось danik.js, 17.02.2013 в 15:47.
Ответить с цитированием
  #9 (permalink)  
Старый 17.02.2013, 15:28
без статуса
Отправить личное сообщение для Deff Посмотреть профиль Найти все сообщения от Deff
 
Регистрация: 25.05.2012
Сообщений: 8,219

В опере и FF не работает

Последний раз редактировалось Deff, 17.02.2013 в 15:31.
Ответить с цитированием
  #10 (permalink)  
Старый 17.02.2013, 15:46
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Теперь работает (В FF точно)
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение свойства :hover по клику дива BoB jQuery 6 21.10.2012 13:36
Изменение цвета ссылки в зависимости от ее адреса theVid jQuery 1 06.10.2012 19:56
Смена картинок в зависимости от положения курсора мыши antonio_vrn Events/DOM/Window 3 31.05.2011 22:07
Изменение класса в <div> при нажатии на него... xmartinesx Общие вопросы Javascript 2 08.10.2010 10:57
Изменение размера блока реклама в зависимости от разрешения экрана. toxiz77 Общие вопросы Javascript 3 11.02.2009 14:12