スライドショーへのサムネイルをホバーするとスライドされるものを、jqueryで作っています。
mouseenterで、gotoイベントを発生させ、動かしているのですが、
メニューが近くにあるので、連続されていて、マウスが離れることなく、重複して実行されてしまい、
マウスを一度離してやらないと実行されないことがあります。
調べたところ、
$(this).stop()
e.preventDefault();
eachイベントにする
等と出てきましたので、やってみましたが、効果がありません。
要素同士を個別に実行させるには、どうすればいいのでしょうか?
$("#listslide a").each(function(){
$(this).mouseenter(function(e) {
e.preventDefault();
_this.stop(true);
return $(this).stop(),_this.goto(($(e.currentTarget).attr("js-item") * 1) + 1);
}).mouseleave(function(){
return $(this).stop();
return _this.stop(true);
});
});
/*
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
ANo1です。
>次のイベントが発生し、次のスライドショーでの動きが始まってしまいます。
jQueryでアニメーションを行っているのだと想像しますが、普通に処理していれば、jQueryの場合は内部でアニメーションを制御していて、次のアニメーションの要求が来ても、一旦キューに溜めて順次処理しているはずと思います。
それなので、「時間が遅れて処理される」ことはあっても、ご説明なさっているようなことは起こりにくくなっているはずなのですが。
(通常のjavascriptで記述すると、うっかりするとそのようなことも起こり得ます)
上記の時間の遅れをなくしたいなどのために、stopメソッドが用意されており、実行中のアニメーションを停止(あるいは終了状態にjump)することができるようになっていたように思います。
同様に、処理のキュー自体も操作できるようになっていたかと・・・(曖昧な記憶ですが)
>たしか、_thisはスライドショーの要素が入っていると思います
多分違うのではないかと想像します。
仮に、DOM要素(または要素のjQueryオブジェクト)だとすると、jQueryオブジェクトであればstopメソッドは備えられていますが、ご提示のスクリプトにあるgotoメソッドは素のjQueryには存在しないはずです。
オブジェクトに拡張定義などをしているのでしょうか?
想像ですが、根本的な原因はご提示のコード以外のスクリプトにあるのではないかと思います。
>他のイベントが始まるとホバーからはストップできないのでしょうか。。。。
イベントの伝搬は制御可能ですが、発生済みのイベントを取り消すことはできません。
ただし、行っているイベント処理を中断することは不可能ではありませんが、そのようにスクリプトが作成されていなければ無理です。
上にも書きましたように、jQueryのアニメーションは中断することが可能なメソッドとして作られていますので、stopメソッドなどで中断することができるのです。
※失礼ながら、質問者様の「イベント」という語句の概念が、一般的なものと少々異なるように感じます。
一般的な言葉の意味を再確認なさっておく方がよろしいかもしれません。
No.1
- 回答日時:
回答がないようなので・・・
ご提示の情報だけではさっぱりなので、多分、他の回答者さんたちもコメントしようがないのではないかと想像します。
以下も、多分に推測ばかりですが・・・
>メニューが近くにあるので、連続されていて、マウスが離れることなく、
>重複して実行されてしまい、
>マウスを一度離してやらないと実行されないことがあります。
事象が把握できません。
他の処理が同時に起きて重複しているということなのか、それとも同じ処理が繰り返して行われるという意味なのか。
「メニューが近くにあるので」とおっしゃっていますが、近いか遠いかは(多分)関係ないはずと思います。
それよりは、要素の包含関係とイベントの設定の仕方が適切でないのではないかと想像します。
どのように適切でないのかは、残念ながら、ご提示の情報からだけではわかりかねます。
>スライドショーへのサムネイル
とのことなので、サムネイル(画像は)
<ul>
<li><a><img></a></li>
~~
のような構造か
<div>
<a><img></a>
~~
のような構造だと推測しますが、ご質問文に記されている機能だけを実現するのであれば、わざわざmouseenterで取得したりeachで処理する必要もなさそうに思われます。
単に
$(サムネイル内のimg).hover( func1, func2 );
といった書式でも、十分に実現可能であると想像します。
一方で、スライドショーがどのようなものなのかわかりませんが、単なるスライドショーならmouseleaveやmoseoutでは何もしなくても良いので、over時(あるいはenter時)の処理を記すだけでも充分なはずと思います。
over時にサムネイル自体を半透明→不透明などと変えていて、outで元に戻しているといったようなことをなさっているなら別ですが、それらしい処理も見当たらないようですし。
それよりも、関係する要素に他のイベントが重複して設定されていないか(意図的に設定しているならOKです)が、ご質問の事象の原因になっているのではないかと推測します。
(ご質問の事象自体がよくわからないのと、ご提示のスクリプトで_thisがどのようなオブジェクトなのかも不明なので、上記はまったくの推測ですが・・・)
蛇足ですが、ご提示のスクリプトで
stop()やpreventDefault()の使い方にも疑問がありますので、もう一度、意味を再確認なさった方がよろしいように思います。
また、スライドショーは検索すれば多くのサンプルが見つかることと思いますので、そのあたりも参考になるのではないでしょうか。
ご回答有難うございます。
情報の提示が、適切ではなかったようで、見てくださった皆様に、混乱させていていたら、すいませんでした。
まず、スライドショーをする大きなバナーが左あり、そのサムネイルが並んで右側にあります。サムネイルをホバーするとイベントが起き、 スライドショーが動くという仕組みです。
サムネイルは並んでいるため、
ホバーで、「サムネイルを触れると、スライドショーが動いて、該当の画像を表示する」 までに、次のイベントが発生し、次のスライドショーでの動きが始まってしまいます。
stop()や、preventDefaultを、入れ込みましたが、問題は解決しません。
stopイベントや、prebentDefaultのイベントを削っても解決しません。
イベントの伝播というより、違うイベントを起こしているからでしょうか。
とりあえず、ホバーでのイベントの時間を短くして、解決はしましたが、親要素に対して行っているイベントでもなく、スライドショーという他のイベントが始まると、
ホバーからはストップできないのでしょうか。。。。
たしか、_thisはスライドショーの要素が入っていると思います。
サムネイルをホバーで動くスライドショーのプラグインは見かけなかったのですが、もしあれば方法がわかり、解決しそうです。探してみます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/30 09:10
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript スマフォではボタンを表示させたくない 2 2023/01/20 14:26
- JavaScript 1日1回引けるJavaScriptおみくじについて 1 2022/12/12 22:28
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript javascriptで移動ボタンを押した際に遷移するボタンを追記したい 1 2022/11/29 03:02
- PHP style.cssのjQuery条件付きcssが機能しない 4 2022/07/17 18:27
- 英語 未来進行形の使い方 5 2023/04/12 08:20
- JavaScript html5に変えるとスライドショーが消えてしまった。 3 2022/03/26 19:53
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
tryの終了
-
DBのinsert/updateを1ボタンで...
-
ftp 同時複数接続の負荷テスト...
-
SwingUtilities.invokeLater(ne...
-
スレッド1とスレッド2を交互に...
-
WaitForSingleObjectの復帰時間
-
JavaScriptからJAVAクラスを呼...
-
doGetとdoPostの違い
-
[Java] while(true)の意味
-
Tomcat高負荷時の設定について
-
Javaでのデバッグコード削除
-
エクセルVBAで、条件に一致する...
-
「タイプ初期化子が例外をスロ...
-
オブジェクト指向プログラミン...
-
生成したインスタンスを削除す...
-
変数名の付け方
-
servletからjspへオブジェクト...
-
レコード件数の表示
-
複数の変数を宣言する時、同時...
-
private static という変数の修飾
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
tryの終了
-
数値の定数を付ける時
-
Javaでのデバッグコード削除
-
C#で別スレッドの終了を知りたい
-
[Java] while(true)の意味
-
Tomcatのスレッドを破棄する方法
-
Javaプログラムからポップアッ...
-
ラジオボタンの選択判定
-
JavaScriptからJAVAクラスを呼...
-
WPF C#でF10のイベント取得方法...
-
PHPでDB処理中にプログレスバー...
-
素数判定を再帰処理で
-
Javaアプリケーション実行の返...
-
switch文の中に、throws new Ex...
-
doGetとdoPostの違い
-
JDBCでテーブルUPDATE後の再検...
-
Tomcat高負荷時の設定について
-
ラベルの表示までが異常に遅い...
-
ExcelVBA で文字列の特定の文字...
-
SwingUtilities.invokeLater(ne...
おすすめ情報