以前作成した単純な div ドラッグ エフェクトを偶然見つけて修正し、いくつかのコメントを追加しました。テスト後、Firefox/chrome/ie6-11 に完全に合格しました。
まず、実装の原則と重要なポイントについて説明します。最も重要なのは 3 つのステップです。最初のステップは、マウスダウン イベントです。マウスがマウス ダウンされると、マウスの X 軸と Y 軸、およびドラッグ ボックスの左と上が記録され、ドラッグ マークに true の値が割り当てられます。 、これはドラッグアクションの準備ができたことを意味します。 2 番目のステップは、mousemove イベントです。このとき、マウスの X 軸と Y 軸が動的に取得され、ドラッグ ボックスの新しい左と上が計算されて割り当てられ、ドラッグ効果が実現されます。 3 番目のステップは、mouseup イベントで、マウスが上に跳ね返ると、ドラッグ フラグに false の値が割り当てられ、ドラッグ アクションが完了します。
HTML コードは次のとおりです:
<div class="divWrap" id="move1" style="width: 200px; height: 200px; background: Green; border: 1px solid red; position: absolute; top: 100px; left: 100px; cursor: move; -moz-user-select: none; -webkit-user-select: none;"></div> <div class="divWrap" style="width: 200px; height: 200px; background: brown; border: 1px solid red; position: absolute; top: 300px; left: 100px;"> <h3 id="move2" style="height: 45px; line-height: 45px; font-size: 18px; background: red; margin: 0; cursor: move; -moz-user-select: none; -webkit-user-select: none;">Title--Move</h3> </div>
js コードは次のとおりです:
(function($) { $.fn.dragDiv = function(divWrap) { return this.each(function() { var $divMove = $(this);//鼠标可拖拽区域 var $divWrap = divWrap ? $divMove.parents(divWrap) : $divMove;//整个移动区域 var mX = 0, mY = 0;//定义鼠标X轴Y轴 var dX = 0, dY = 0;//定义div左、上位置 var isDown = false;//mousedown标记 if(document.attachEvent) {//ie的事件监听,拖拽div时禁止选中内容,firefox与chrome已在css中设置过-moz-user-select: none; -webkit-user-select: none; $divMove[0].attachEvent('onselectstart', function() { return false; }); } $divMove.mousedown(function(event) { var event = event || window.event; mX = event.clientX; mY = event.clientY; dX = $divWrap.offset().left; dY = $divWrap.offset().top; isDown = true;//鼠标拖拽启动 }); $(document).mousemove(function(event) { var event = event || window.event; var x = event.clientX;//鼠标滑动时的X轴 var y = event.clientY;//鼠标滑动时的Y轴 if(isDown) { $divWrap.css({"left": x - mX + dX, "top": y - mY + dY});//div动态位置赋值 } }); $divMove.mouseup(function() { isDown = false;//鼠标拖拽结束 }); }); }; })(jQuery); // $(document).ready(function() { $("#move1").dragDiv();//拖拽整个div $("#move2").dragDiv(".divWrap");//拖拽div头部 });
最後に、ドラッグ操作を開始する前にコンテンツの選択を禁止する必要があります。そうしないと、ドラッグ効果が影響を受けます。 Firefox と Chrome は CSS: {-moz-user-select: none; -webkit-user-select: none;} で設定できますが、IE は HTML に直接 onselectstart="return false" を記述することもできます。少し影響を受けたので、この書き方を中止して、IEブラウザ用のonselectstartイベントをjsで書くことにしました。
この小さなプラグインはドラッグ アンド ドロップ効果を実装するだけですが、互換性が高く、ある程度の知識とスキルも必要とします。もちろん、このプラグインまたは内部のアイデアを使用して、より完全なドラッグ アンド ドロップ プラグイン (Draggable や Droppable など) を拡張して作成することもできます。
以上がこの記事の全内容です。皆さんに気に入っていただければ幸いです。