Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Менюшка. DIV с меняющимся цветом.

369
05 августа 2010 года
Kesano
451 / / 09.10.2007
Привет всем.

Перерыл много интернетов в поисках оптимального способа сделать элементы с меняющимся цветом фона.

Ну и "придумал" свой способ, который легко интегрируется куда угодно, в любой элемент (от div до body).

Итак, меню на DIV'ах с меняющимся фоном. Способ с использованием JavaScript.

описание элемента, к которому будет применяться эффект:
 
Код:
<div &#111;&#110;MouseOver="cup(this);" &#111;&#110;MouseOut="cdown(this);"> Какой-нить текст</div>


Javascript который ведет обработку:
 
Код:
<script language="javascript">
function cup(obj) {
obj.style.background="#0099FF";
obj.style.color="#FFFFFF";
}
function cdown(obj) {
obj.style.background="white";
obj.style.color="#0099FF";
}
</script>


То есть: при наведении на нужный блок курсора, он вызывает событие cup() которое придаёт фону голубой цвет, а тексту в этом блоке - белый.
при отведении курсора вызывается событие cdown() который возвращает предыдущий цвет фона (в моем случае - белый) и цвет текста.

Для чего делать это жаваскриптом на не чистым CSSом?

Ну во-первых, у меня так и не получилось заставить работать стиль с :hover (кто знает как заставить работать класс с ховером - в пм плз).
А во вторых, это даёт нам возможность по-куралесить... Например так:

Меняем java script:
Код:
<script language="javascript">
function cup(obj) {
obj.style.background="#"+randcolor();
obj.style.color="#FFFFFF";
}
function cdown(obj) {
obj.style.background="white";
obj.style.color="#0099FF";
}
function randcolor() {rflags = new Array ('0','1','2','3','4','5','6','7','8','9','0','A','B','C','D','E','F');colors='';
for (i=0; i<6; i++){numb=Math.floor(Math.random()*15);colors+=rflags[numb];}return colors;}

</script>

Что получим? Получим абсолютно случайный цвет фона при каждом наведении...
Как это работает??? На примите на рекламу, но я тут начал клепать свой бложик в свободное время... пример такого "случайного" бэкграунда можете посмотреть на нём (блог не рабочий, там тупо вёрстка). не рекламо.
_ttp://kzavr.co.cc

В чем суть последнего скрипта?
Вызывается дополнительная функция, которая случайным образом генерит HEX-код цвета... ИМХО - получилось забавно.

Хинт: Если на body поставить эвент onMouseMove="cup(this);" то можно сделать страничку для уничтожения психически нездоровых людей (очень быстро меняются цвета).
287
05 августа 2010 года
Shiizoo
958 / / 14.03.2004
На самом деле, прописывание html-событий не самое интересное (и правильное) занятие. Все-таки код это код, разметка - это разметка. В этом смысле элегантное решение - это как jQuery. Не знаю насчет практики "облегчения" jQuery, но наверняка есть варианты ее же самой, либо аналоги, которые достаточно легковесны, чтобы не воротить нос, и обладают при этом преимуществом разделения кода и представления.
244
06 августа 2010 года
UAS
2.0K / / 19.07.2006
Ну, в jQuery спокойно можно спокойно навешать hover, mouseover и прочее (не помню сейчас названия методов).
Про :hover тут написано http://www.umade.ru/log/2004/07/css-hover-any-element/

Также почитайте про то, что цвета в CSS можно установить через RGB (rgb(x,x,x)). Тогда функция randcolor() явно станет проще и адекватнее.

А так, в целом, ничего особого)
369
06 августа 2010 года
Kesano
451 / / 09.10.2007
UAS'ь, ты как всегда :)...

Объяснюсь...

1. jQuery , я уверен, неплохой инструмент. Я плохой разработчик, т.к. не люблю/боюсь/не умею использовать фреймворки... Быть может я когда-то всё же дойду до того, чтобы изучить jQuery и научиться использовать ВСЕ его прелести... Но согласитесь... Заводить целый комбайн ради одного колоска?... И дело не в весе скрипта... Вы же не пользуетесь огнемётом, чтобы убить муху, ведь достаточно мухобойки. Нет, огнемёт это делает быстрее и эффективнее (так же помогает избавиться от жуков, тараканов, клопов, муравьем и комаров)... Но нужно ли это, когда у нас только мухи?...
Вообще сий опус больше для пытливых умов, из разряда "как сделать забавный эффект, не прибегая к библиотекам".

2. Про RGB в CSS обязательно почитаю... и не нужен будет массив а достаточно будет Math.random()*255 . Действительно поможет избавиться от целой строчки кода )

3. UAS'ь по поводу совета про :hover. Я находил эту статью... Смутило 2 вещи.
  • 1. Опять же нужно подключать левый файлик.
  • 2. Мой способ позволяет проходить валиадацию на 100%, в отличие от предложенного авторами csshover.htc . Не то чтобы я W3C-фаг, но порой приятно получить зеленую метку и знать что твой код в порядке и отлично работает в FF, Opera, Chrome, IE7, IE8, Safari.

    В общем, кому пригодится - пользуйтесь на здоровье!
    За комментарии тож спасибо...
  • 253
    06 августа 2010 года
    Proger_XP
    1.5K / / 07.08.2004
    Цитата: Kesano

    Ну во-первых, у меня так и не получилось заставить работать стиль с :hover (кто знает как заставить работать класс с ховером - в пм плз).


    Если что-то можно сделать на CSS, то это и нужно там делать. hover с классом задаётся также, как и без оного (работать в IE 6 не будет, но это легко обойти тем же JS):

     
    Код:
    div.a-class:hover, div.a-class-hovered { color: #f00; background: #fff; }

    ...

    <div &#111;&#110;mousemove="this.className += '-hovered';" &#111;&#110;mouseout="...">...


    Рандом сюда конечно не применишь, для этого нужно будет JS. Про rgb() согласен с остальными.
    jQuery я бы тоже сюда притягивать не стал (кстати отже не люблю фреймворков).
    13
    06 августа 2010 года
    RussianSpy
    3.0K / / 04.07.2006
    Цитата: Proger_XP
    Если что-то можно сделать на CSS, то это и нужно там делать. hover с классом задаётся также, как и без оного (работать в IE 6 не будет, но это легко обойти тем же JS):


    В данном случае как раз лучше использовать ТОЛЬКО js если есть цель сохранить кроссбраузерность. Плодить лишний код и усложнять обработку лишь для того чтобы сделать "правильно" полнейший идиотизм.

    Цитата: Proger_XP

    Рандом сюда конечно не применишь, для этого нужно будет JS. Про rgb() согласен с остальными.
    jQuery я бы тоже сюда притягивать не стал (кстати отже не люблю фреймворков).


    В данном случае действительно не обязательно использовать фреймворки (хотя подобный функционал можно реализовать в качестве плагина и количество кода сурово сократится). Тут можно обойтись и чистым js - есть такой метод addEventListener().

    244
    06 августа 2010 года
    UAS
    2.0K / / 19.07.2006
    Ну так-то да, jQuery здесь конечно не нужен, в этом контексте=)
    Просто я мыслю в промышленных масштабах, где у меня jQuery только и используется)
    253
    06 августа 2010 года
    Proger_XP
    1.5K / / 07.08.2004
    Цитата: RussianSpy
    Плодить лишний код и усложнять обработку лишь для того чтобы сделать "правильно" полнейший идиотизм.


    Ну, "правильность" сама по себе действительно никому не нужна. Идея была в том, что на CSS это можно сделать одной инструкцией без лишних телодвижений, и это будет работать везде, кроме IE 6 (и без скриптов). А так как последний уже почти отжил, то его сегодня многие игнорируют. Остаётся только CSS.

    Посему если юзать CSS+JS получится работоспособный hover в любом браузере даже без включенного JS, и тот же эффект в IE 6 через JS.

    369
    06 августа 2010 года
    Kesano
    451 / / 09.10.2007
    странно, вчера у меня :hover не работало, сегодня заработало )
    Мистико... По поводу IE6... Надо посмотреть какую-то реальную статистику по миру, как много людей всё еще используют IE6
    244
    06 августа 2010 года
    UAS
    2.0K / / 19.07.2006
    А моё имхо - ну их в пень с их ИЕ6, чего и вам советую. Пусть сами слазят с него, когда поймут, что через него сайты норм не работают. Пора юзерам шестого осла под нас прогибаться, а не нам, под них =\

    [COLOR="Silver"]Даешь революцию! Которую, правда, гугл уже начал[/COLOR]
    563
    06 августа 2010 года
    MrLinker
    249 / / 17.09.2006
    Цитата:
    Надо посмотреть какую-то реальную статистику по миру, как много людей всё еще используют IE6


    Статистика эта зависит от ресурса.
    Глобально ~7-8%
    Для интернет-магазина может составить 12%

    Потому, никаких понтов тут быть не может. Никто в здравом уме, имея магазин, не откажется от 8-12% потенциальных покупателей.

    253
    06 августа 2010 года
    Proger_XP
    1.5K / / 07.08.2004
    Цитата: MrLinker

    Потому, никаких понтов тут быть не может. Никто в здравом уме, имея магазин, не откажется от 8-12% потенциальных покупателей.


    Однако ж не все делают интернет-магазины. Для остальных вещей, которые от юзера ничего не хотят, а наоборот юзер что-то хочет, вроде блогов, сайтов с торрентами и т.д. - для них гораздо проще не писать больше кода и стимулировать посетителей использовать нормальное ПО.

    Иначе что ответишь на вопрос "а нафига мне что-то ещё, коли в IE 6 все сайты и так нормально видно"? Действительно, если все будут писать под IE6+остальной_мир (как было не так давно), то юзеру незачем будет что-то предпринимать :)

    563
    06 августа 2010 года
    MrLinker
    249 / / 17.09.2006
    Цитата:
    Однако ж не все делают интернет-магазины. Для остальных вещей, которые от юзера ничего не хотят, а наоборот юзер что-то хочет, вроде блогов, сайтов с торрентами и т.д. - для них гораздо проще не писать больше кода и стимулировать посетителей использовать нормальное ПО.


    Закономерный и ожидаемый вывод.
    Посему, тема раскрыта, вопросов больше ни у кого нет :)

    287
    06 августа 2010 года
    Shiizoo
    958 / / 14.03.2004
    Если не ошибаюсь, не везде, где есть attachEvent, есть addEventListener. Наверняка, различий больше и они глубже, иначе бы jQuery был бы меньше. Но речь о нем в том числе зашла и потому, что "открытие" ТС, наверняка, будет применяться не водиночку, а наряду с остальными всеми "открытиями". Если на это наложить стремление к максимально адекватной совместимости, то это может стать похоже на писание не совсем тривиальных GUI-приложений на чистом asm'е.

    По поводу IE6, я сам не большой сторонник того, чтобы выбрасывать работающее древнее железо, а IE6 стоит на нем и ничто современное туда не прикрутится.
    13
    06 августа 2010 года
    RussianSpy
    3.0K / / 04.07.2006
    Насколько я помню проблемы с hover есть не только у IE6, но и у IE7.

    Еще меня всегда забавляло как люди отказываются от поддержки ИЕ6, которым пользуется по разным данным от 10 до 20% пользователей, но заботятся об оригиналах, которые ходят по сети с отключенным JS. Их итак считаные проценты да и как правило это люди больные на голову паранойей, а такие ничего не будут покупать в онлайн магазинах.

    В общем уже пошел флуд. Автор топика уже получил ответ на свой вопрос.
    287
    06 августа 2010 года
    Shiizoo
    958 / / 14.03.2004
    Мне в свое время очень нравилось во freebsd в lynx сидеть. Соответственно, JavaScript в текстовом браузере не было. Надо заботиться и о них, надо. :) Расширение NoScript для FF вообще по умолчанию JS блокирует везде. Ну и повод есть его отключать, так что эта доля вполне может вырасти во что-то значительное. ^)
    13
    06 августа 2010 года
    RussianSpy
    3.0K / / 04.07.2006
    Ну сношать себе мозг ради пары задротов сидящих в Lynx или каком-нибудь старом браузере могут только люди, обладающие воистину бесконечным свободным временем.

    Сидя в lynx вы же понимаете что просмотр видео или к примеру онлайн игры для вас закрыты?

    С другой стороны пихать JS везде где только можно тоже глупо. Все хорошо в меру. Но в любом случае не стоит принимать во внимание любителей экзотического серфа - зачем мешать людям заниматься мазохизмом.
    253
    06 августа 2010 года
    Proger_XP
    1.5K / / 07.08.2004
    Цитата: RussianSpy

    Еще меня всегда забавляло как люди отказываются от поддержки ИЕ6, которым пользуется ... до 20% пользователей, но заботятся ... с отключенным JS. Их итак считаные проценты.



    Цитата: RussianSpy
    Но в любом случае не стоит принимать во внимание любителей экзотического серфа - зачем мешать людям заниматься мазохизмом.


    Это верно. Однако я не раз встречал другую статистику об отключенном JS - в районе 20%. Недавно даже на форуме тема проскакивала. На своём сайте я тоже вижу статистику с ~18% юзеров без JS. Сам я сижу на FF с NoScript и далеко не я один такой.

    А раз пользователей IE 6 будет уменьшаться (хотя бы из-за стараний MS), а юзеров без JS - столько же (а то и увеличиваться) - то с прицелом на будущее лучше писать под вторых, чем под первых :rolleyes:

    Хотя как писать, с JS или CSS - больше уже личные предпочтения.

    287
    06 августа 2010 года
    Shiizoo
    958 / / 14.03.2004
    Цитата: RussianSpy
    С другой стороны пихать JS везде где только можно тоже глупо. Все хорошо в меру. Но в любом случае не стоит принимать во внимание любителей экзотического серфа - зачем мешать людям заниматься мазохизмом.



    Про ролики и прочие свистелки речи не идет. Просто нужно чтобы меню, тексты и т. п. были доступны без JS. Вот мэйл ру щас на AJAX переползает. Раньше из консольного браузера можно было спокойно забрать почту. Как щас - не знаю. Mail-клиенты давно не юзаю. ^) Как в одном подкасте про облачные выч. недавно сказали, надежнее хранить данные у крупного сервиса, чем у себя дома. В данном случае работает правило у меня. =)

    Вообще говоря, меня очень порадовало в свое время, что на W3C появились всякие accesibility guidelines. Про них, по-моему, нельзя забывать (если не ошибаюсь, здоровых людей больше не становится, а число заболеваний связанных со зрением будет расти), а их требования (цвета, сочетания, шрифты и др. более тонкие вещи) могут быть очень созвучны с консольными мазохистами. :)

    13
    06 августа 2010 года
    RussianSpy
    3.0K / / 04.07.2006
    Угодить всем все равно не удастся.
    287
    06 августа 2010 года
    Shiizoo
    958 / / 14.03.2004
    Ну упомянутая мною тема это ничуть не менее важно, чем всякие пандусы и прочее такое. Свобода доступа к информации - это то, о чем и есть интернет. :)
    253
    06 августа 2010 года
    Proger_XP
    1.5K / / 07.08.2004
    Цитата: Shiizoo
    Ну упомянутая мною тема это ничуть не менее важно, чем всякие пандусы и прочее такое. Свобода доступа к информации - это то, о чем и есть интернет. :)


    Это уже чистой воды флейм пошёл :D

    Цитата: RussianSpy
    Угодить всем все равно не удастся.


    Предлагаю остановиться на этом.

    13
    07 августа 2010 года
    RussianSpy
    3.0K / / 04.07.2006
    Цитата: Proger_XP
    Это уже чистой воды флейм пошёл :D


    Предлагаю остановиться на этом.



    Я предлагал остановиться еще страницу назад.

    563
    07 августа 2010 года
    MrLinker
    249 / / 17.09.2006
    Цитата:
    А раз пользователей IE 6 будет уменьшаться (хотя бы из-за стараний MS), а юзеров без JS - столько же (а то и увеличиваться) - то с прицелом на будущее лучше писать под вторых, чем под первых
    Хотя как писать, с JS или CSS - больше уже личные предпочтения.


    Писать надо и под тех, и под других. И не надо сомневаться. Всем за труды воздастся.
    Есть смысл (выгода) учесть пользователей IE6? Надо учесть.
    Если пишем на js, надо понимать, что пользователи без js не должны об этом узнать.

    339
    09 августа 2010 года
    verybadbug
    619 / / 12.09.2005
    Цитата: Proger_XP
    hover с классом задаётся также, как и без оного (работать в IE 6 не будет, но это легко обойти тем же JS)



    можно и без js обойтись - использовать A вместо DIV..

    Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог