検索
ホームページウェブフロントエンドjsチュートリアルjQueryは単純なドラッグ効果を実装します

この記事では、jQuery を使用して簡単なドラッグ効果を実現するための関連情報を主に紹介します。私は、個人的に、これが非常に優れたユーザー エクスペリエンスであると考えました。参考までに、編集者をフォローして詳細な紹介を見てみましょう。

前書き

この記事では主に jQuery を使用した簡単なドラッグ エフェクトを紹介し、参考と学習のために共有します。以下では多くを述べません。詳細な紹介を見てみましょう。

質問する

あるボックスから別のボックスに要素をプルするにはどうすればよいですか?

実装アイデア

  • この操作に含まれるイベントは、mousedown、mousemove、mouseup の 3 つのイベントを監視し、対応する操作を実行します。

  • 操作設計のノードは、元のノード、一時ノード、新しいノードです

    ​​
  • ノードの移動にはイベントの座標が関係します

  • 操作要素はJQUERYを使用して実装されます

該当するコメントは記事内に反映されておりますので、よく読んでいただければご理解いただけます。

    最初に、ドラッグに必要なパラメータを含むオブジェクトのドラッグを定義します
  • さまざまなマウスイベントをリッスンするための初期化 init 関数を定義します
  • mousedown イベント: 一時的なノードのクローンを作成します。マウスのクリック位置とノードの位置の X、Y の差を記録し、クローン コピーのスタイルを設定し、このコピーを元のコンテナに追加します
  • mousemove イベント: マウスの相対的な変位を決定し、XY を設定しますコピーの絶対位置を確認し、マウスを調整します。ブラウザから移動する状況を処理し、3 つの UL を横断し、元のコンテナでない場合は、マウスの位置が他のコンテナの範囲内にあるかどうかを判断します。その場合、マウスの現在のコンテナのスタイルが変更されます。
  • マウスアップ時間: 一時ノードを削除します。 3 つの UL をトラバースし、それが元のコンテナではない場合は、マウスの位置が他のコンテナの範囲内にあるかどうかを確認し、その範囲内にある場合は、そのコンテナの下に新しいノードを追加し、元のコンテナから元のノードを削除します。
  • nbsp;html>
    
    
     <meta>
     <title>拖拽</title>
     <style>
     .container ul{
     width: 350px;
     padding: 15px;
     min-height:300px;
     background-color:#FFFFF0;
     margin:20px;
     display: inline-block;
     border-radius: 5px;
     border: 1px solid #bbb;
     }
     .container ul li{
     display: block;
     float: left;
     width: 350px;
     height: 35px;
     line-height: 35px;
     border-radius: 4px;
     margin: 0;
     padding: 0;
     list-style: none;
     background-color:#EED2EE;
     margin-bottom:10px;
     -moz-user-select: none;
     user-select: none;
     text-indent: 10px;
     color: #555;
    }
    </style>
    
    
    
    
     <p>
    
     </p>
       
    • A
    •  
    • B
    •  
    • C
    •  
    • e
    •  
    • f
    •  
    • g
    •  
     
       
        <script></script> <script> $(function(){ //出入允许拖拽节点的父容器,一般是ul外层的容器 drag.init(&#39;container&#39;); }); //拖拽 var drag = { class_name : null, //允许放置的容器 permitDrag : false, //是否允许移动标识 _x : 0, //节点x坐标 _y : 0, //节点y坐标 _left : 0, //光标与节点坐标的距离 _top : 0, //光标与节点坐标的距离 old_elm : null, //拖拽原节点 tmp_elm : null, //跟随光标移动的临时节点 new_elm : null, //拖拽完成后添加的新节点 //初始化 init : function (className){ //允许拖拽节点的父容器的classname(可按照需要,修改为id或其他) drag.class_name = className; //监听鼠标按下事件,动态绑定要拖拽的节点(因为节点可能是动态添加的) $(&#39;.&#39; + drag.class_name).on(&#39;mousedown&#39;, &#39;ul li&#39;, function(event){ //当在允许拖拽的节点上监听到点击事件,将标识设置为可以拖拽 drag.permitDrag = true; //获取到拖拽的原节点对象 drag.old_elm = $(this); //执行开始拖拽的操作 drag.mousedown(event); return false; }); //监听鼠标移动 $(document).mousemove(function(event){ //判断拖拽标识是否为允许,否则不进行操作 if(!drag.permitDrag) return false; //执行移动的操作 drag.mousemove(event); return false; }); //监听鼠标放开 $(document).mouseup(function(event){ //判断拖拽标识是否为允许,否则不进行操作 if(!drag.permitDrag) return false; //拖拽结束后恢复标识到初始状态 drag.permitDrag = false; //执行拖拽结束后的操作 drag.mouseup(event); return false; }); }, //按下鼠标 执行的操作 mousedown : function (event){ //1.克隆临时节点,跟随鼠标进行移动 drag.tmp_elm = $(drag.old_elm).clone(); //2.计算 节点 和 光标 的坐标 drag._x = $(drag.old_elm).offset().left; drag._y = $(drag.old_elm).offset().top; var e = event || window.event; drag._left = e.pageX - drag._x; drag._top = e.pageY - drag._y; //3.修改克隆节点的坐标,实现跟随鼠标进行移动的效果 $(drag.tmp_elm).css({ &#39;position&#39; : &#39;absolute&#39;, &#39;background-color&#39; : &#39;#FF8C69&#39;, &#39;left&#39; : drag._x, &#39;top&#39; : drag._y, }); //4.添加临时节点 tmp = $(drag.old_elm).parent().append(drag.tmp_elm); drag.tmp_elm = $(tmp).find(drag.tmp_elm); $(drag.tmp_elm).css(&#39;cursor&#39;, &#39;move&#39;); }, //移动鼠标 执行的操作 mousemove : function (event){ //2.计算坐标 var e = event || window.event; var x = e.pageX - drag._left; var y = e.pageY - drag._top; var maxL = $(document).width() - $(drag.old_elm).outerWidth(); var maxT = $(document).height() - $(drag.old_elm).outerHeight(); //不允许超出浏览器范围 x = x < 0 ? 0: x; x = x > maxL ? maxL: x; y = y < 0 ? 0: y; y = y > maxT ? maxT: y; //3.修改克隆节点的坐标 $(drag.tmp_elm).css({ &#39;left&#39; : x, &#39;top&#39; : y, }); //判断当前容器是否允许放置节点 $.each($(&#39;.&#39; + drag.class_name + &#39; ul&#39;), function(index, value){ //获取容器的坐标范围 (区域) var box_x = $(value).offset().left; //容器左上角x坐标 var box_y = $(value).offset().top; //容器左上角y坐标 var box_width = $(value).outerWidth(); //容器宽 var box_height = $(value).outerHeight();//容器高 //给可以放置的容器加背景色 if(e.pageX > box_x && e.pageX < box_x+box_width && e.pageY > box_y && e.pageY < box_y+box_height){ //判断是否不在原来的容器下(使用坐标进行判断:x、y任意一个坐标不等于原坐标,则表示不是原来的容器) if($(value).offset().left !== drag.old_elm.parent().offset().left || $(value).offset().top !== drag.old_elm.parent().offset().top){ $(value).css(&#39;background-color&#39;, &#39;#FFEFD5&#39;); } }else{ //恢复容器原背景色 $(value).css(&#39;background-color&#39;, &#39;#FFFFF0&#39;); } }); }, //放开鼠标 执行的操作 mouseup : function (event){ //移除临时节点 $(drag.tmp_elm).remove(); //判断所在区域是否允许放置节点 var e = event || window.event; $.each($(&#39;.&#39; + drag.class_name + &#39; ul&#39;), function(index, value){ //获取容器的坐标范围 (区域) var box_x = $(value).offset().left; //容器左上角x坐标 var box_y = $(value).offset().top; //容器左上角y坐标 var box_width = $(value).outerWidth(); //容器宽 var box_height = $(value).outerHeight();//容器高 //判断放开鼠标位置是否想允许放置的容器范围内 if(e.pageX > box_x && e.pageX < box_x-0+box_width && e.pageY > box_y && e.pageY < box_y-0+box_height){ //判断是否不在原来的容器下(使用坐标进行判断:x、y任意一个坐标不等于原坐标,则表示不是原来的容器) if($(value).offset().left !== drag.old_elm.parent().offset().left || $(value).offset().top !== drag.old_elm.parent().offset().top){ //向目标容器添加节点并删除原节点 tmp = $(drag.old_elm).clone(); var newObj = $(value).append(tmp); $(drag.old_elm).remove(); //获取新添加节点的对象 drag.new_elm = $(newObj).find(tmp); } } //恢复容器原背景色 $(value).css(&#39;background-color&#39;, &#39;#FFFFF0&#39;); }); }, }; </script>
      • プロジェクトのデモはここをクリックしてください。

      関連する推奨事項:


      TP5はWebuploaderを統合してプレビュードラッグ検索と削除を実現

      zTreeプラグインを使用してドラッグアンドドロップ機能を実装するjQueryの例の説明

      テーブルマウスドラッグソートの実装HTML の関数

      以上がjQueryは単純なドラッグ効果を実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

      声明
      この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
      舞台裏:JavaScriptをパワーする言語は何ですか?舞台裏:JavaScriptをパワーする言語は何ですか?Apr 28, 2025 am 12:01 AM

      JavaScriptはブラウザとnode.js環境で実行され、JavaScriptエンジンに依存してコードを解析および実行します。 1)解析段階で抽象的構文ツリー(AST)を生成します。 2)ASTをコンパイル段階のバイトコードまたはマシンコードに変換します。 3)実行段階でコンパイルされたコードを実行します。

      PythonとJavaScriptの未来:傾向と予測PythonとJavaScriptの未来:傾向と予測Apr 27, 2025 am 12:21 AM

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

      Python vs. JavaScript:開発環境とツールPython vs. JavaScript:開発環境とツールApr 26, 2025 am 12:09 AM

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

      JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

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

      JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

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

      CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

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

      Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

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

      Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

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

      See all articles

      ホットAIツール

      Undresser.AI Undress

      Undresser.AI Undress

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

      AI Clothes Remover

      AI Clothes Remover

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

      Undress AI Tool

      Undress AI Tool

      脱衣画像を無料で

      Clothoff.io

      Clothoff.io

      AI衣類リムーバー

      Video Face Swap

      Video Face Swap

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

      ホットツール

      EditPlus 中国語クラック版

      EditPlus 中国語クラック版

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

      SublimeText3 英語版

      SublimeText3 英語版

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

      Dreamweaver Mac版

      Dreamweaver Mac版

      ビジュアル Web 開発ツール

      WebStorm Mac版

      WebStorm Mac版

      便利なJavaScript開発ツール

      SecLists

      SecLists

      SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。