


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衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

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

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

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

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

ホットトピック









フロントエンドのサーマルペーパーチケット印刷のためのよくある質問とソリューションフロントエンド開発におけるチケット印刷は、一般的な要件です。しかし、多くの開発者が実装しています...

スキルや業界のニーズに応じて、PythonおよびJavaScript開発者には絶対的な給与はありません。 1. Pythonは、データサイエンスと機械学習でさらに支払われる場合があります。 2。JavaScriptは、フロントエンドとフルスタックの開発に大きな需要があり、その給与もかなりです。 3。影響要因には、経験、地理的位置、会社の規模、特定のスキルが含まれます。

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

同じIDを持つ配列要素をJavaScriptの1つのオブジェクトにマージする方法は?データを処理するとき、私たちはしばしば同じIDを持つ必要性に遭遇します...

Console.log出力の違いの根本原因に関する詳細な議論。この記事では、Console.log関数の出力結果の違いをコードの一部で分析し、その背後にある理由を説明します。 �...

この記事の視差スクロールと要素のアニメーション効果の実現に関する議論では、Shiseidoの公式ウェブサイト(https://www.shisido.co.co.jp/sb/wonderland/)と同様の達成方法について説明します。

JavaScriptを学ぶことは難しくありませんが、挑戦的です。 1)変数、データ型、関数などの基本概念を理解します。2)非同期プログラミングをマスターし、イベントループを通じて実装します。 3)DOM操作を使用し、非同期リクエストを処理することを約束します。 4)一般的な間違いを避け、デバッグテクニックを使用します。 5)パフォーマンスを最適化し、ベストプラクティスに従ってください。

フロントエンドのVSCodeと同様に、パネルドラッグアンドドロップ調整機能の実装を調べます。フロントエンド開発では、VSCODEと同様のVSCODEを実装する方法...
