JavaScriptでロールオーバー

人が書いたスクリプトを自分なりに書き換えてみるシリーズ。

これを見て

考えたこと

で自分でも書いてみた

(function() {
  if (!document.getElementsByTagName) return;

  var addEvent, switchImage, init;
  addEvent = function(obj, type, func) {
    if (obj.addEventListener) {
      obj.addEventListener(type, func, false);
    }
    else if (obj.attachEvent) {
      obj.attachEvent('on' + type, func);
    }
  };
  switchImage = function(event) {
    var img = event.target || event.srcElement;
    img.src = (img.src == img.srcOff) ? img.srcOn : img.srcOff;
  };
  init = function() {
    var imgs = document.getElementsByTagName('img');
    var loaded = {}, img;
    for (var i = 0, len = imgs.length; i < len; i++) {
      img = imgs[i];
      if ( !img.src.match(/^(.*_)off(\..*)$/) ) continue;
      img.srcOff = img.src;
      img.srcOn = RegExp.$1 + 'on' + RegExp.$2;
      addEvent(img, 'mouseover', switchImage);
      addEvent(img, 'mouseout', switchImage);
      if (loaded[img.srcOn]) continue;
      loaded[img.srcOn] = true;
      (new Image).src = img.srcOn;
    }
  };

  addEvent(window, 'load', init);
})();

いきあたりばったりな書き方になっている気がする。

参照

記事の書き方を真似してみました。あと正規表現マッチのところでヒントを頂きました。