Internet Explorer 9 では、Google Maps API v2 (非推奨) を使用して、スクロール ホイールでズームすると、ページもスクロールします。この問題の回避策を知っている人はいますか? (残念ながら、コードベースを v3 にアップグレードすることはまだできません。) この動作は、以前のバージョンの Internet Explorer では発生しません。
4 に答える
多くの人がネット上で同じ問題を抱えているようですが、解決策が投稿されていません。だからここに私のものがあります:
スクロール不可能なコンポーネントはスクロール イベントを発生させず、そのイベントはドキュメント オブジェクトでキャンセルできないため、標準の DOM は使用できませんでした。幸いなことに、「mousewheel」と呼ばれる小さな jQuery プラグインがあり、「mousewheel」および「unmousewheel」イベント バインディング関数を jQuery に追加します。「マウスホイール」イベントによって呼び出される関数は false を返してキャンセルすることができ、ドキュメントはそれを受け取りません。そこで、IE9 以上をテストし、必要に応じてこの小さなプラグインをダウンロードして、マップを保持する div に適用します。
してみてください
$('#map').mouseover( function(){
document.body.style.overflow = 'hidden';
$('#wrap').css('margin-right','17px');
console.log('mouse -> map , ' , document.body.scroll, ' / ' , document.body.style.overflow );
} );
$('#map').mouseout( function(){
document.body.style.overflow = 'auto';
$('#wrap').css('margin-right','0px');
console.log('mouse map -> , ' , document.body.scroll, ' / ' , document.body.style.overflow);
} );
このコードはスクロールバーを非表示にします。IE でスクロールを無効にする唯一の方法であることがわかりました。
document.body.scroll = "no"
働かないでください。(IE9)
#map - Google マップの div で、#wraper - すべてのページの div です。
$('#wrap').css('margin-right','17px');
// 左スクロールバーが非表示/表示されたときにページ幅を維持するためだけに
同じ問題が発生し、次のように解決しました。カーソルがマップ要素の上にあり、スクロールホイールが移動すると、ページ全体のスクロールが無効になります。地図のみがズームインまたはズームアウトします
$('#map').live("mouseover",function() {
$('#map').mousewheel(function(event) {
stopWheel(event);
});
})
function stopWheel(e){
if(!e){ /* IE7, IE8, Chrome, Safari */
e = window.event;
}
if(e.preventDefault) { /* Chrome, Safari, Firefox */
e.preventDefault();
}
e.returnValue = false; /* IE7, IE8 */
}
PrototypeJS 1.7 でこの問題を修正するには (Marek や theazureshadow が示唆するように)、IE9 で使用できます。
$(gMapDiv).observe('mousewheel', function(event){
event.stop();
});