jQueryでオリジナルのイベントを発行し、そのイベントで関数を駆動させる
jQueryではクリック、マウスオーバー、マウスリーブなどの既定のイベントが存在しますが、『要素が画面内に表示された時』にはイベントは発行されません。
アニメーションなどを設定すると、スクロールして要素が表示される前にアニメーションが終了してしまうという問題が発生してしまうので、今まで座標とスクロール量から、要素が画面内に収まっているか判定するなど、その都度泥臭い作業をしてきました。
そこで「監視対象の要素が『画面内に入った時』と『画面から出た時』の両方でイベントが発生したら良いのに」と考えて、オリジナルのイベントを作ることにしました。
jQueryでオリジナルのイベントを発行
クリックイベントなどを任意のタイミングで発行するメソッド『trigger』はご存じでしょうか?
// class:homeにクリックイベントを発行させる
$('.hoge').trigger('click');
この『trigger』関数を呼び出した時点で、引数に指定したイベントが発行されます。
この引数が『定数』ではなく『変数』であることにご注目ください。
イベントが決まったものしか設定できないなら、以下のように定数を入力させ、決まった値しか受け取らなければ良いのです。
Microsoft製の言語だと、よくこういう書き方をさせますよね。
// こういう書き方はしない
$('.hoge').trigger(EVENT_CLICK);
この変数を受け付ける構造は、既定の物以外でも受け付ける設定になっているんです。
// 任意のタイミングでオリジナルイベントを発行
$('.home').trigger('original_event');
これでオリジナルのイベントを発行することができます。
オリジナルイベントで動かす
さて、イベントの発行ができたら、そのイベントによって、関数を駆動させてみましょう。
オリジナルのイベントを処理するには、『on』を使用します。
$('.hoge').on('original_event', function() {
// ここに処理を書く
});
これだけです。通常のイベント処理と同じように書くことが出来ます。
オリジナルのイベントを発行することで、処理の開始点と処理をわけて記述することが出来るので、すっきりとしたコードが書けるようになります。
『頻繁に使用するか』『必要か』と言われると、別の手段はいくらでもありますが、処理の開始部分にクラス名などを付けず、ただイベントを発行するだけにすることで、コードの再利用性を高めることが出来ます。
もしお困りごとがありましたら、お問い合わせフォームよりご相談ください。