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

Preload и rollover кактусов

5 марта 2004 г.

Удобный и нехлопотный rollover (меняющаяся кнопка или картинка). Минимальная настройка, рекомендуется к повсеместному употреблению.

Кактус 1 Кактус 2 Кактус 123

кактусы взяты c florashop.ru

HTML

<img src="/i/kak/1.jpg" alt="Кактус 1" width="130" height="130" /> <img src="/i/kak/2.jpg" alt="Кактус 2" width="130" height="130" /> <img src="/i/kak/123.jpg" alt="Кактус 123" width="130" height="130" />

Файлы с картинками обзывайте цифрами. Активные картинки нужно величать соответственно JavaScript переменной active_img_suffix (см. ниже).

JavaScript

<script type="text/javascript">
<!--
/*
created by alexander shurkayev <alshur@ya.ru> | http://htmlcssjs.ru
modified by ilya lebedev (ilya@lebedev.net)
*/

var img_path = "/i/"; // путь к картинкам от корня сайта
var img_menu_dir = "kak"; // папка с картинками, которые должны меняться (никаких слэшей в названии!)
var img_ext = ".jpg"; // расширение у меняемых картинок (должно быть у всех одинаково)
var active_img_suffix = "s"; // суффикс у активных картинок (т. е. в моём случае путь к первой активной картинке такой: "/i/kak/1s.jpg")

function preloadImg(file){
  var image = new Image();
  image.src = img_path + img_menu_dir + "/" + file + img_ext;
}

function show(e){
  var el = window.event ? window.event.srcElement : e.currentTarget;
  var str = img_menu_dir + "\\/(\\d+)" + img_ext;
  var re = new RegExp(str, "i");
  el_src = el.src;
  r = el_src.match(re);
  if (r) el.src = img_path + img_menu_dir + "/" + r[1] + active_img_suffix + img_ext;
}

function hide(e){
  var el = window.event ? window.event.srcElement : e.currentTarget;
  var str = img_menu_dir + "\\/(\\d+)" + active_img_suffix + img_ext;
  var re = new RegExp(str, "i");
  el_src = el.src;
  r = el_src.match(re);
  if (r) el.src = img_path + img_menu_dir + "/" + r[1] + img_ext;
}

function init(){
  if (document.images){
    var img_item = img_item_src = r = null;
    var str = img_menu_dir + "\\/(\\d+)" + img_ext;
    var re = new RegExp(str, "i");
    for (var i = 0; (img_item = document.getElementsByTagName("img").item(i)); i++){
      img_item_src = img_item.src;
      r = img_item_src.match(re);
      if (!r) continue; // !!!
      preloadImg(r[1] + active_img_suffix);
      if (img_item.addEventListener){
        img_item.addEventListener("mouseover", show, false);
        img_item.addEventListener("mouseout", hide, false);
      }else if (img_item.attachEvent){
        img_item.attachEvent("onmouseover", show);
        img_item.attachEvent("onmouseout", hide);
      }
    }
  }
}

var root = window.addEventListener || window.attachEvent ? window : document.addEventListener ? document : null;
if (root){
  if (root.addEventListener) root.addEventListener("load", init, false);
  else if (root.attachEvent) root.attachEvent("onload", init);
}
//-->
</script>

Совместимость

IE5+, NN6/Mozilla, Opera6+.

Меняющиеся кнопки легко настроить за минуту.

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

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

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

Объявления

LiveInternet