Firefoxでのmousewheel(DOMMouseScroll)イベントに関連するかなりの問題が発生しています。ヘッダーdiv、コンテンツdiv、フッターdivがあります。マップオブジェクト(フラッシュオブジェクト)があり、マウスホイールがズームインおよびズームアウトする必要があるため、ユーザーがヘッダーとフッターを表示している間はページをスクロールできるが、コンテンツを表示している間はスクロールできないようにします。
jQuery1.8とFirefox15.0.1を使用しています。私はこれを理解するためにほぼ一日を費やしました、そしてこれはうまくいくはずだと私には思えます:
var isFireFox = (navigator.userAgent.indexOf('Firefox') != -1);
var scrollEv = (isFireFox)? 'DOMMouseScroll' : 'mousewheel';
$(document).on(scrollEv, HandleScroll);
function HandleScroll(e)
{
var sender = event.srcElement;
alert(sender.id + " has sent event: " + e.type);
if (sender.id == "viewerContent" || sender.id == "mapObject")
{
alert("Event is being blocked");
e.stopPropagation();
e.preventDefault();
}
}
数え切れないほどの投稿、スレッド、ブログを読んだことがありますが、読んだものはすべて、IE、Chrome、Firefoxで動作するはずだと言っています。もちろん、FireFoxでは動作しません。「HandleScroll」機能すら入りません。また、私はこのようなもっと簡単なことをすることさえ可能であるはずだと思います:
$('#viewerContent').on(scrollEv, false);
$('#mapObject').on(scrollEv, false);
簡単なことを見落としたことはありますか?
助けてくれてありがとう、
ギルマン
追加した :
FabrícioMattéの提案に従って、私もこれを試しました:
$('#viewerContent').scroll(HandleScroll);
$('#mapObject').scroll(HandleScroll);
この :
$('#viewerContent').on('scroll', HandleScroll);
$('#mapObject').on('scroll', HandleScroll);
無駄に!
再度追加:
jcubicは、このページのプラグインを使用することを提案しました:github.com/brandonaaron/jquery-mousewheel
それがどのように機能するのかよくわかりません。スクリプトタグを介してページにスクリプトを含めるだけで、提供されたリンクの例に示されているメソッドの1つを呼び出すことになっていますか?
ありがとう
さらなる追加:
プラグインを動作させました。とても簡単でした。しかし、これは私の問題を解決しません。標準のdivでは機能しますが、フラッシュコンテンツを含むdivでは機能しないようです。http://cookbooks.adobe.com/post_Workaround_to_support_mouse_wheel_for_FireFox_with-13086.htmlで詳しく説明されているように、これはフラッシュまたはFirefoxのバグだと思い始めています。
誰かがこれを確認できれば、私はそれをいただければ幸いです。
動作しない別の解決策:
sethetterによる提案に従って、私はこれを試しました。
var isOverContent;
$('#viewerContent').on('mouseover', function(){isOverContent = true;});
$('#viewerContent').on('mouseout', function(){isOverContent = false;});
document.onscroll = HandleScroll;
function HandleScroll(e)
{
if (isOverContent)
{
console.log("Tried to block event");
e.stopPropagation(); // Apparently, the "scroll" event cannot be prevented or canceled.
e.preventDefault();
}
}
これにより、ユーザーがFireFoxのviewerContentをスクロールしたときを検出できます。ただし、デフォルトの防止および伝播の停止イベントは機能しません。ページはスクロールし続けます。