


Javascript ドラッグ アンド ドロップの高度なアプリケーション (コードを 1 行ずつ分析し、ドラッグ アンド ドロップの原理を簡単に理解できるようにします)_JavaScript スキル
前のドラッグの周囲に何かがある場合にどのような問題が発生するか見てみましょう? 高度なブラウザでは問題ありません。IE7 でテストしてみると問題が発生します。写真の通り
テキストが選択されていることがはっきりとわかります。そして、このユーザーエクスペリエンスは非常に悪く、使用するのが不便です。ちなみに、以前に return false を追加しましたが、これを削除すると、Chrome でも同じ問題が発生します。つまり、この return false は、Chrome ff IE9 などのブラウザの問題を解決できることを意味します。
実際、私たちの開発では、ページ上に 1 つの div だけを配置することはできません。Baidu マップなど、他の場所を選択することはできません。
では、どうすればそのような抗力を実現できるのでしょうか? IE7の問題は解決できるのでしょうか?
解決策:
これを解決するには、ちょっとしたトリックを使用できます。このトリックは IE6 ~ 8 でのみサポートされており、他のブラウザでは return false を使用するだけで十分なので、実際に問題を解決できます。どのようなテクニックがあるのか見てみましょう
イベント攻略です! ! 簡単な説明と添付のコード
<title></title> <script type="text/javascript"> window.onload=function(){ var oBtn=document.getElementById("btn"); oBtn.onclick=function(){ alert(1); }; // 网页上所有地方的上的事件都集中到一个按钮身上 IE 专用 oBtn.setCapture(); // 点击哪里都是弹a } </script> </head> <body> <input type="button" id="btn" value="按钮" /> </body>
実際には、ページ上のすべての場所からのイベントが 1 つの点に集中します。ページ上の任意の場所をクリックすると、setCapture() の関数がポップアップします。
すべてのイベントを 1 つのボタンに集中して処理します。 ! IEのみ対応です! !
それでは、前のコードを変更する方法を見てみましょう。 。 。 。
まず、すべてのドキュメントを div に戻します。マウスのドラッグが速くなるため、div をドラッグする方が簡単だということを思い出してください。そのため、ドキュメントにイベントを追加します。
今これを行う必要はありません。前の div に setCapture() を追加して効果を確認してください。
<body> IE 7 中的文字会被选中 , <br />如果不加return false chrome ff 也会有这样的问题 asdsadad <br /> <div id="div1"> asdsadad asdsadad asdsadad </div> asdsadadasdsadadasdsadad </body>
<style type="text/css"> #div1 { width: 200px; height: 200px; background: red; position: absolute; } </style>
<script type="text/javascript"> // 拖拽空div 低版本的火狐有bug window.onload = function() { var oDiv = document.getElementById("div1"); var disX = 0; var disY = 0; oDiv.onmousedown = function(ev) { var oEvent = ev || event; disX = oEvent.clientX - oDiv.offsetLeft; disY = oEvent.clientY - oDiv.offsetTop; oDiv.onmousemove = function(ev) { var oEvent = ev || event; var oDivLeft = oEvent.clientX - disX; var oDivTop = oEvent.clientY - disY; oDiv.style.left = oDivLeft + 'px'; oDiv.style.top = oDivTop + 'px'; }; oDiv.onmouseup = function() { oDiv.onmousemove = null; oDiv.onmouseup = null; }; oDiv.setCapture(); return false; // 阻止默认事件,解决火狐的bug }; }; </script>
現時点では、Div をドラッグするときに実際にマウスでドラッグするという問題は発生しません。 実際、setCapture() を追加すると、Web ページ全体のすべてのイベントがこの div に収集されます。
実際、現在、このテキストは選択されません。なぜ? Web ページ上のテキストや画像のイベントはすべて div にあるため、イベントを取得できなくなります。したがって、当然選ばれません。
もちろん、別の質問がありますか? ? ? ?それらの単語を選択しようとすると、選択できないことがわかります。
どうするか、イベントは div に集中しています。 。 。 !!!!
実際、この setCapture() はロックのようなもので、イベントはすべて div 上にあります。これで、対応するものが releaseCapture();
になります。releaseCapture(); はキャプチャを解放します。 実際には、マウスを上げたときに追加するだけです。
window.onload = function() { var oDiv = document.getElementById("div1"); var disX = 0; var disY = 0; oDiv.onmousedown = function(ev) { var oEvent = ev || event; disX = oEvent.clientX - oDiv.offsetLeft; disY = oEvent.clientY - oDiv.offsetTop; oDiv.onmousemove = function(ev) { var oEvent = ev || event; var oDivLeft = oEvent.clientX - disX; var oDivTop = oEvent.clientY - disY; oDiv.style.left = oDivLeft + 'px'; oDiv.style.top = oDivTop + 'px'; }; oDiv.onmouseup = function() { oDiv.onmousemove = null; oDiv.onmouseup = null; oDiv.releaseCapture(); }; oDiv.setCapture(); return false; // 阻止默认事件,解决火狐的bug }; };
テキスト選択の問題は解決できるようになりました。 実際、この setCapture() は互換性がなく、他のブラウザに入れるのは間違いです。
今回と前回のコードをマージするだけなので、互換性があると判断するだけです。最後に、コンパイルされたコードが添付されます
<script type="text/javascript"> window.onload = function() { var oDiv = document.getElementById("div1"); var disX = 0; var disY = 0; oDiv.onmousedown = function(ev) { var oEvent = ev || event; disX = oEvent.clientX - oDiv.offsetLeft; disY = oEvent.clientY - oDiv.offsetTop; if (oDiv.setCapture) { oDiv.onmousemove = mouseMove; oDiv.onmouseup = mouseUp; oDiv.setCapture(); // IE 7 下文字就不会被选中 其实就是文字或图片得不到事件 } else { document.onmousemove = mouseMove; document.onmouseup = mouseUp; } function mouseMove(ev) { var oEvent = ev || event; var oDivLeft = oEvent.clientX - disX; var oDivTop = oEvent.clientY - disY; oDiv.style.left = oDivLeft + 'px'; oDiv.style.top = oDivTop + 'px'; } function mouseUp(ev) { this.onmousemove = null; this.onmouseup = null; if (oDiv.releaseCapture) { oDiv.releaseCapture(); // 释放捕获 } } return false; // 阻止默认事件,解决火狐的bug }; }; </script>
はい、終わりましたO(∩_∩)Oははは〜

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

このチュートリアルでは、カスタムGoogle検索APIをブログまたはWebサイトに統合する方法を示し、標準のWordPressテーマ検索関数よりも洗練された検索エクスペリエンスを提供します。 驚くほど簡単です!検索をyに制限することができます

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

この記事シリーズは、2017年半ばに最新の情報と新鮮な例で書き直されました。 このJSONの例では、JSON形式を使用してファイルに単純な値を保存する方法について説明します。 キー価値ペア表記を使用して、あらゆる種類を保存できます

楽なWebページレイアウトのためにjQueryを活用する:8本質的なプラグイン jQueryは、Webページのレイアウトを大幅に簡素化します。 この記事では、プロセスを合理化する8つの強力なjQueryプラグイン、特に手動のウェブサイトの作成に役立ちます

コアポイント これは通常、メソッドを「所有」するオブジェクトを指しますが、関数がどのように呼び出されるかに依存します。 現在のオブジェクトがない場合、これはグローバルオブジェクトを指します。 Webブラウザでは、ウィンドウで表されます。 関数を呼び出すと、これはグローバルオブジェクトを維持しますが、オブジェクトコンストラクターまたはそのメソッドを呼び出すとき、これはオブジェクトのインスタンスを指します。 call()、apply()、bind()などのメソッドを使用して、このコンテキストを変更できます。これらのメソッドは、与えられたこの値とパラメーターを使用して関数を呼び出します。 JavaScriptは優れたプログラミング言語です。数年前、この文はそうでした

jQueryは素晴らしいJavaScriptフレームワークです。ただし、他のライブラリと同様に、何が起こっているのかを発見するためにフードの下に入る必要がある場合があります。おそらく、バグをトレースしているか、jQueryが特定のUIをどのように達成するかに興味があるからです

この投稿は、Android、BlackBerry、およびiPhoneアプリ開発用の有用なチートシート、リファレンスガイド、クイックレシピ、コードスニペットをコンパイルします。 開発者がいないべきではありません! タッチジェスチャーリファレンスガイド(PDF) Desigの貴重なリソース
