Поиск объекта по class
Здравствуйте!
У меня есть скрипт, который отвечает за прокрутку контента в div'e:
function init(id) {
var obj = document.getElementById(id);
if (obj) {
obj.state = 0;//инициализируем состояние
obj.timer = null;
obj.maxVert = obj.scrollHeight - obj.offsetHeight;//максимальная высота прокрутки
}
}
function scroll_down(id,timer) {
var obj = document.getElementById(id);//получаем объект по ID
if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем
if (timer == undefined) obj.state = 1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки, ставим состояние прокрутки вниз
if ((obj.maxVert > obj.scrollTop) && (obj.state == 1)) {//если не достигли предела и состояние прокрутки все еще "вниз"(1)
obj.scrollTop = obj.scrollTop + 10;//добавляем смещение прокрутки на 10 пикселей
obj.timer = setTimeout('scroll_down(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки
}
}
function scroll_up(id,timer) {
var obj = document.getElementById(id);//получаем объект по ID
if (!obj.maxVert) init(id);//если объект еще не иниициализировался - инициализируем
if (timer == undefined) obj.state = -1;//если не передан второй параметр timer, значит вызов был от кнопки прокрутки,ставим состояние прокрутки вверх
if ((obj.scrollTop > 0) && (obj.state == -1)) {//если не достигли начала и состояние прокрутки все еще "вверх"(-1)
obj.scrollTop = obj.scrollTop > 10 ? obj.scrollTop - 10 : 0;//добавляем смещение прокрутки на 10 пикселей
obj.timer = setTimeout('scroll_up(\''+id+'\',true)',100);//устанавливаем таймер вызова этой же функции для дальнейшей прокрутки
}
}
function scroll_stop(id) {
var obj = document.getElementById(id);//получаем объект по ID
if (obj) {
if (obj.timer) clearTimeout(obj.timer);
obj.state = 0;
}
}
Прошу обратить внимание, что скрипт использует поиск по id'y, можно ли как-то сделать, чтобы он искал по классам? Заранее благодарен. |
Для поиска элементов по имени класса можно использовать в новых браузерах метод getElementsByClassName и его эмуляцию для старых браузеров. В любом случае простой заменой getElementById на getElementsByClassName вам не обойтись, скрипт нужно полностью переписать, чтобы иметь возможность работать с несколькими элементами.
|
Спасибо за ответ. в JS я, мягко говоря, ноль. Использую готовые скрипты, но к сожалению найти подобный скрипт под классы я не смог.
Вы не можете что-либо подсказать? |
http://javascript.ru/forum/misc/2464...-stranicy.html
ЗЫ третья ссылка по форумному поиску по слову class |
function getElementsByClass(cls, node, tag)
{
if(document.getElementsByClass) return document.getElementsByClass(cls, node, tag);
if(! node) node = document;
if(! tag) tag = '*';
var them = node.getElementsByTagName(tag),
rez = [];
for(var notI = 0; notI < them.length; ++notI)
if(them[notI].className == cls) rez.push(them[notI]);
return rez;
}
|
Цитата:
И классов может быть несколько (перечислены через пробел), многие верстальщики знают о этой возможности и активно её используют, поэтому ваша функция будет работать далеко не везде. Функция должна выглядеть примерно таким образом: getElementsByClassName |
ну функция то не моя. а доработанная Дастина Диаса.
а вот тут можно посмотреть спидтест по аналогичным функциям. Такая будет работать и с пробелами
function getElementsByClass(cls, node, tag)
{
if(! node) node = document;
if(! tag) tag = '*';
var them = node.getElementsByTagName(tag),
var rez = [];
cls = " " + cls + " ";
for(var notI = 0; notI < them.length; ++notI){
var classString = " " + them[notI].className + " ";
if(classString.indexOf(cls) != -1) rez.push(them[notI]);
}
return rez;
}
|
Эта функция будет работать не правильно.
|
Это все ерунда
Зачем в диве прокручивать контент? Он прокручивается сам, если у дива поставить свойство стиля overflow:auto. Появится скролл и все будет прокручиваться само
|
Цитата:
|
| Часовой пояс GMT +3, время: 11:38. |