Заметки о вёрстке сайтов  ·  Александр Шуркаев об HTML, CSS и JavaScript (скрипты, справочники и примеры по сайтостроению)

И снова кактусы. Объектные.

7 мая 2004 г.

Модифицированный вариант скрипта, который можно использовать для отрисовки rollover меню на сайтах. Подойдёт и просто для меняющихся кнопок.

Основываясь на предыдущей заметке, Илья Лебедев предлагает модифицированный вариант скрипта, который можно использовать для отрисовки rollover меню на сайтах.

Особенности:

  • Скрипт переписан в виде объекта.
  • Облегчены методы show() и hide() — они вызываются только для картинок, которые соответствуют заданному шаблону.
  • Установщик обработчиков событий вытащен из tooltip'ов.
  • Можно задать активную картинку, на которую не будет действовать rollover.

JavaScript

/*
created by alexander shurkayev <alshur@ya.ru> | http://htmlcssjs.ru
modified by ilya lebedev (ilya@lebedev.net)
*/

window.onerror = null;

rollmenu = {
    img_path     : "/i/", // path to the images from the site root
    img_menu_dir : "menu",     // folder with the images (should contain no slashes!)
    img_ext      : ".gif",     // default extension. all images should have the same extension
    r_img_suffix : "__",       // rollover image suffix (ex. "/i/menu/1__.gif")
    a_img_suffix : "_",        // active image suffix (ex. "/i/menu/1_.gif")
    preload : function (file){
      var image = new Image();
      image.src = rollmenu.img_path + rollmenu.img_menu_dir + "/" + file + rollmenu.img_ext;
    },
    s : function(e){
      var el = window.event ? window.event.srcElement : e.currentTarget;
      el.src = el.rollsrc;
    },
    h : function(e){
      var el = window.event ? window.event.srcElement : e.currentTarget;
      el.src = el.defsrc;
    },
    init : function(){
      if (document.images){
        var img_item = r = null;
        var str = rollmenu.img_menu_dir + "\\/(\\w+)\\" + rollmenu.img_ext;
        var re = new RegExp(str, "i");
        var rexp = new RegExp (rollmenu.img_ext + "$","");
        for (var i = 0; (img_item = document.getElementsByTagName("img").item(i)); i++){
          r = img_item.src.match(re);
          if (!r) continue;
          if (img_item.getAttribute("links") && document.location.pathname.match(new RegExp(img_item.getAttribute("links"), "i"))){
            img_item.src = img_item.src.replace(new RegExp(rollmenu.img_ext), rollmenu.a_img_suffix + rollmenu.img_ext);
          } else {
            rollmenu.preload(r[1] + rollmenu.a_img_suffix);
            rollmenu.preload(r[1] + rollmenu.r_img_suffix);
            img_item.rollsrc = img_item.src.replace(rexp, rollmenu.r_img_suffix + rollmenu.img_ext);
            img_item.defsrc = img_item.src;
            rollmenu.l(img_item,"mouseover", rollmenu.s);
            rollmenu.l(img_item,"mouseout", rollmenu.h);
          }
        }
      }
    },
    l : function(o, e, a){
      if (o.addEventListener) return o.addEventListener(e, a, false);
      else if (o.attachEvent) return o.attachEvent("on" + e, a);
      else return false;
    }
}

rollmenu.l(window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null, "load", rollmenu.init);

HTML

Придуманный HTML атрибут links является регулярным выражением, которое отвечает за выбор и статическую подсветку нужного пункта меню.

Пример:

<a href="/"><img src="/images/menu/home.gif" links="home|login|^$" /></a>
<a href="/ourservices"><img src="/images/menu/serv.gif" links="ourservices" /></a>
<a href="/member"><img src="/images/menu/member.gif" links="member" /></a>
<a href="/aboutus"><img src="/images/menu/about.gif" links="aboutus" /></a>
<a href="/feedback"><img src="/images/menu/contact.gif" links="feedback" /></a>

Хитовые статьи про разработку сайтов

Рассылка новостей и новых статей

Сообщения будут приходить пару раз в неделю, не чаще

Объявления

LiveInternet