15年以上前の仕様 jQuery, JavaScript でマウスオーバ「しか」操作していないモノを駆逐せよ

現在の更新作業担当しているサイトで、「そんなにマウスオーバーに fade 付けたかったん?」という jQuery が、散見される(ゲンナリ)。
MIT やから使ったか知らんけど、2009年て。ヲマエ、2019年ぐらいに作ってんちゃうんけ、コレ…。ソース配布場所が、ドメインごと消えてるしな…。

という愚痴は置いといて。

今や、CSS『のみ』で余裕で置き換えられるので、とっとと jQuery 記述を削除して、CSS を搭載し、無駄な JS 発火を減らすのがベター。いや、ベスト。
幸いにも、jQuery の発火に、.hov という class が付いていた。共通 CSS が存在するようであれば、.hov に CSS を追加して対応を進めるべきかと。

(".hov").hover(function(){}

head 内などで、既存取扱いサイトで存在している

<script>	
jQuery(document).ready(
  function(){
    jQuery(".hov").hover(function(){
       jQuery(this).fadeTo("normal", 0.6); // マウスオーバー時にmormal速度で、透明度を60%にする
    },function(){
       jQuery(this).fadeTo("normal", 1.0); // マウスアウト時にmormal速度で、透明度を100%に戻す
    });
  });
</script>

という script が存在したら、(ちなみに、mormal速度って何な? ってなる。コメントすらエラーしている、もはやプログラマーとしても、頭脳的にどうなのか案件…)
先に CSS ファイルを探し

.hov {
	transition: all .6s;
	opacity: 1;
}
.hov:hover {opacity: .6;}

を追記。
基本的には、コレで、上記 jQuery の動作と同等の機能を果たす。

rollover.js

正規表現でマッチさせて、などがあり、やたら長い。

/* --------------------------------------------------------------------------
	last update: 09/06/16
																	created by edo.
	
	This script attach the rollover effect to image on 'rollover' class.
	This is distributed by the MIT license.
	
	URL: http://css-eblog.com/
----------------------------------------------------------------------------- */

(function() {
var filename = 'rollover.js';
var _className = 'rollover';

function getJsParam() {
	//get scripts list.
	var scripts = document.getElementsByTagName( 'script' );
	var script;
	var params = {};
	
	//pickup this file.
	for ( var i=0; i<scripts.length; i++ ) {
		var s = scripts.item( i );
		if( s.src.indexOf( filename ) !== -1 ) {
			script = s;
			break;
		}
	}
	
	if( script ) {
		script.src.match( /(.*)(\?)(.*)/ );
		if( RegExp.$3 ) {
			var a = RegExp.$3.split( '&' );
			if( a ) {
				for( var k=0; k<a.length; k++ ) {
					var p = a[ k ].split( '=' );
					if( p[0] ) {
						params[ p[0] ] = p[1];
					}
				}
			} else {
				return false;
			}
		} else {
			return false;
		}
	} else {
		return false;
	}
	
	return params;
}

function addEvent( node, evt, handler ) {
	try {
		if( node.addEventListener ) {
			node.addEventListener( evt, handler, false );
		} else {
			node.attachEvent( 'on' + evt, handler );
		}
	} catch( e ) {}
}

function setEvent( ele, ty ) {
	ele.originalSrc = ele.src;
	ele.originalSrc.match( /^(.*)(\.{1}.*)/g );
	ele.hoverSrc = RegExp.$1 + ty + RegExp.$2;
	addEvent( ele, 'mouseover', function( evt ) {
		var tar = evt.target || evt.srcElement;
		tar.src = tar.hoverSrc;
	});
	addEvent( ele, 'mouseout', function( evt ) {
		var tar = evt.target || evt.srcElement;
		tar.src = tar.originalSrc;
	});
}

function startRollover() {
	var jParam = getJsParam();
	var jType = jParam.type ? jParam.type : '_on';
	var imgs = document.getElementsByTagName( 'img' );
	for( var i=0; i<imgs.length; i++ ) {
		if( imgs[i].className.indexOf( _className ) !== -1 ) {
			setEvent( imgs[i], jType );
		}
	}
}

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

作成者情報の URI は、もはや存在しない。
したがって、そのスクリプトは、期限切れだと判断するほうが良いと考える。

前半の jQuery 同様、class に rollover が付けられたモノに対して、発火しているので、CSS で対処。

.rollover {
	transition: all .6s;
	opacity: 1;
}
.rollover:hover {opacity: .6;}

transition の有無やタイミングは、サイトの他の部分に合わせる。
基本は、無くて良いと思っている。

個人的には、ふわっと来るの、大嫌い。
シャキっと出やがれ! て思う。

この記事が気に入ったらサポートをしてみませんか?