ドラッグアンドドロップモジュールをカプセル化してみてください。当初は style.left のみを使用する予定でしたが、position:Absolute を設定する必要がありました。コードに何らかの影響を与える可能性があります。 CSS 変換は互換性に影響しますが、ここでもこの属性の変換を使用して移動を完了します。
スタイルだけで完成したコード
あまり言うことはありませんが、
htmlとcssのコードに直接進みましょう。結果として、このコードを初めて書いたとき、ここで位置を設定する必要がありました。 、JSは正しく書いてあるのに、エフェクトが全然抜けない…本当にショートです
nbsp;html> <meta> <title>学习</title> <style> *{ margin: 0; padding: 0; } #box{ width: 200px; height: 200px; background: #6f6; font-size: 20px; cursor:move; position: absolute; } </style> <p></p> <script></script>
ポイント! ! JS
; //这个分号是为了防止其他的模块最后忘记加分号,导致错误。 (function() { //构造函数,属于每一个实例 function Drag(selector) { this.elem = typeof selector == 'object' ? selector : document.getElementById(selector); //鼠标初始位置 this.startX = 0; this.startY = 0; //元素初始位置 this.sourceX = 0; this.sourceY = 0; this.init(); } //原型,共有的 Drag.prototype = { constructor: Drag, init: function() { this.setDrag(); }, //用于获取元素当前的位置信息 getPosition: function() { var that = this; var pos = {}; pos = { x: that.elem.offsetLeft, y: that.elem.offsetTop }; return pos; }, //用来设置当前元素的位置 setPosition: function(pos) { this.elem.style.left = pos.x + 'px'; this.elem.style.top = pos.y + 'px'; }, //该方法用来绑定事件 setDrag: function() { var self = this; this.elem.addEventListener('mousedown', start, false); function start(event) { self.startX = event.pageX; self.startY = event.pageY; var pos = self.getPosition(); self.sourceX = pos.x; self.sourceY = pos.y; document.addEventListener('mousemove', move, false); document.addEventListener('mouseup', end, false); } function move(event) { //总体思想:鼠标距浏览器距-鼠标距元素距离 var currentX = event.pageX; //当前的鼠标x位置 var currentY = event.pageY; //当前的鼠标y位置 var distanceX = currentX - self.startX; //鼠标移动的距离x var distanceY = currentY - self.startY; //鼠标移动的距离y self.setPosition({ x: self.sourceX + distanceX, y: self.sourceY + distanceY }); } function end(event) { document.removeEventListener('mousemove', move); document.removeEventListener('mouseup', end); } } }; //暴露在外 window.Drag = Drag; })(); new Drag('box');
このコードは比較的理解しやすいですが、最初にBo Dashenのコードを見たとき、なぜ正規表現が使われるのか予想していなかったので、実はtranslateの使い方が分かりませんでした…
ですが。比較的単純ですが、このコードの原理を分析する必要があります:
1. 自己実行関数にはコンストラクター Drag() があり、コンストラクター内で設定するメソッドと属性はそれぞれのコンストラクター インスタンスに固有です。彼らの位置情報など。プロトタイプには、要素の位置情報を取得する getPosition()、要素の位置を設定する setPosition()、イベントをバインドする setDrag() の 3 つのメソッドがあります。これら 3 つはパブリックなので、リソースを節約するために、プロトタイプ。
2. このコードの実行原理は、マウスが押されると、要素sourceX/Yの初期位置情報と、マウスの移動が完了したときにマウスstartX/Yの初期位置情報が取得されます。マウスの新しい位置 currentX/Y が取得されます。2 つのマウスの位置を減算すると、マウスが移動する距離 X/Y が得られます。これは、要素の移動距離でもあります。次に、この値を要素の style.left に割り当てます。 /上。要素のドラッグが実現されます。
transform と style の組み合わせ
テクノロジーの発展により、ますます多くのデバイスが CSS3 をサポートし始めています。また、style はより多くのリソースを消費し、効率性に問題があるため、transform の使用を検討します。
ブラウザ互換の記述方法
まず関数Drag()の前にprivate属性を追加します:
var transform = getTransform();
以下にprivateメソッドを追加します:
function getTransform() { var transform = "", pStyle = document.createElement('p').style, transformArr = ['transform', 'webkitTransform', 'MozTransform', 'msTransform', 'oTransform'], i = 0, l = transformArr.length; for (; i <h4 id="追記-次回の閲覧を判断するためにcreateElement-メソッドを覚えておいてくださいデバイスは互換性があります">追記: 次回の閲覧を判断するためにcreateElement()メソッドを覚えておいてくださいデバイスは互換性があります! </h4><p>同じ形式で getPosition() の下に関数を追加する必要もあります: </p><pre class="brush:php;toolbar:false">getTranslate: function() { var val = {}; var transformValue = document.defaultView.getComputedStyle(this.elem, false)[transform]; if(transformValue=='none'){ val={x:0,y:0}; }else{ var transformArr = transformValue.match(/-?\d+/g); val = { x: Number(transformArr[4]), y: Number(transformArr[5]) }; } return val; },
PS:transformValue が none であるかどうかを判断する必要がある理由は、初期化状態では要素が transform 属性を設定していないためです。そのため、正規化後の配列では[4][5]
が見つからないため、valの2つの属性を0に設定します。これは、後でtransformとなるtranslateXとtranslateYの値です。
コードを書き続けます。上の段落では、translate の X 値と Y 値を抽出するために使用しました。次の段落を見てください:
getPosition: function() { var that = this; var pos = {}; if(transform){ var val=this.getTranslate(); pos={ x:val.x, y:val.y }; }else{ pos = { x: that.elem.offsetLeft, y: that.elem.offsetTop }; } return pos; },
上記のコードで変更した内容に注目してください。ここで判断を追加します。つまり、transform 属性をサポートするブラウザが存在する場合、transform 属性を使用して値を変更します。要素の値を変更し、getTranslateの前に要素の値を変更します。 で取得したxとyをposのxとyに代入します。
上記のコードでは、ブラウザに応じて異なるメソッドを使用して同じ値を取得します。val の値は、要素の変換から抽出した getTranslate() から取得されます。同様に、以下のsetPosition()でもif判定を設定する必要があります。
rreeeこの段落では特に言うことはありません。単に、さまざまな形式で値を割り当てることについてです。
この時点で、モジュールはパッケージ化されています。次に、完全なコードを見てみましょう:
setPosition: function(pos) { if (transform) { this.elem.style[transform] = 'translate(' + pos.x + 'px' + ',' + pos.y + 'px)'; } else { this.elem.style.left = pos.x + 'px'; this.elem.style.top = pos.y + 'px'; } },
関連する推奨事項:
javascript グローバル変数カプセル化モジュール実装コード_javascript スキル
以上が独自のモジュールインスタンスのカプセル化の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PythonとJavaScriptの将来の傾向には、1。Pythonが科学コンピューティングの分野での位置を統合し、AI、2。JavaScriptはWebテクノロジーの開発を促進します。どちらもそれぞれのフィールドでアプリケーションシナリオを拡大し続け、パフォーマンスをより多くのブレークスルーを行います。

開発環境におけるPythonとJavaScriptの両方の選択が重要です。 1)Pythonの開発環境には、Pycharm、Jupyternotebook、Anacondaが含まれます。これらは、データサイエンスと迅速なプロトタイピングに適しています。 2)JavaScriptの開発環境には、フロントエンドおよびバックエンド開発に適したnode.js、vscode、およびwebpackが含まれます。プロジェクトのニーズに応じて適切なツールを選択すると、開発効率とプロジェクトの成功率が向上する可能性があります。

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

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

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

mPDF
mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SAP NetWeaver Server Adapter for Eclipse
Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

ホットトピック









