- 締切済み
animate関数とmousewheelイベント
jquery(ver1.8.1)とjquery.mousewheel.jsを併用した場合の質問です。 マウスホイールイベントで、ある地点まで画面をスクロールさせたいのですが、 マウスホイールを連続で回した場合、スクロール最中はイベントを検知しないように処理したいのですが、方法がわかりません(下記は下方向のみの処理)。現状ではスクロール中に余分なイベントを拾っているようで挙動がおかしいです。 よろしくご教授ください。 var flug=0;var pointArray=new Array(0,100,200,300,400); $(window).bind('mousewheel',function(event,delta){ var dir=delta>0 ? 'Up':'Down',vel=Math.abs(delta); if($('html,body').not(':animated')&&dir==="Down"&&flug<=pointArray.length-1){ flug++; $('html,body').stop(true,false).animate({scrollTop:pointArray[flug]},{duration:500,complete:function(){$(this).queue([]).stop();}}); }else{ return false; } });
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- fujillin
- ベストアンサー率61% (1594/2576)
jqueryはろくに知りませんし、jquery.mousewheelはまったく知らないので、まるきりわかってませんが… >スクロール最中はイベントを検知しないように処理したいのですが、方法がわかりません jQueryでアニメーションを行なっていれば、:animatedで識別できるはずと予想しますが、自前で行なうのであれば、アニメーション中のフラグを用意しておいて、フラグが立っている間は処理をしないようにすれば良いのではないでしょうか。(アニメーションのcallbackでフラグをクリア) でも、原因はそこではないような気もしますが… >挙動がおかしいです どのようにおかしいのか書いて無いので不明ですが、もしもスクロール速度にムラがあるといったような現象であれば、 stop(true, false)で距離に残りが出るので、次に移動する量はそれまでと変わるはずですが、それに対して一定のdurationでアニメーションすると結果的に速度が変わって見えるのではないかと。 何もしないでアニメーションを実行するとかにすれば、jQueryの場合はキューが溜まるだけではなかったでしたっけ? 移動方向が変わったときだけ、クリアしてあげるとか… ろくにわかっていませんので、意味が違っていたなら無視してください。