ホームページ > 記事 > ウェブフロントエンド > JavaScript は要素をドラッグしてグリッドに位置合わせする機能を実装します (毎回固定距離を移動します)。
ここ数日間、私は要素をドラッグするための追加機能に取り組んできました。これは、実際には、要素の初期位置を決定し、毎回一定の距離を移動することを意味します。要素をドラッグします。要素をグリッド内に整列させることができます。まずはレンダリングを見てから、詳細を説明していきます
各要素が最小単位距離に従って移動することがわかります。そしてそのたびに要素がグリッドに整列します。
まずデモに基づいてアイデアと詳細を説明し、デモコードは後で説明します。
1. 要素の各移動の最小単位 (デモでは 10px と 10px) を決定します。つまり、水平方向または垂直方向の移動はそれぞれ 10 ピクセルです。グリッド背景のレイヤーを配置すると、効果がわかりやすくなります (デモの各グリッドも 10px * 10px)。
2. 効果をより明確に確認するために、要素の幅と高さ (両方とも 10 ピクセルの倍数) とデフォルトの位置 (これも 10 ピクセルの倍数) が初期化されます。たとえば、要素の幅と高さは 50px * 50px、要素の初期位置は 0xp * 0px です。この利点は、最初に読み込むときに、要素が整数の小さなグリッド (つまり、5 * 5 の小さなグリッド) をカバーすることが保証され、グリッドが不完全にカバーされないことです。この記事は実際には、ユーザーや強迫性障害を持つ人々があまり心配しないようにするためのものであり、実際には配置位置を美しくするための単なる操作です。理解のある友達はそこまで意識する必要はなく、ただ理解するだけでいいのです。
3. 最も重要なことは、一定の距離を移動するタイミングをどのように決定するかです。このデモ効果について理解しておくべきことが 1 つあります。マウスの動きと要素の動きは対応していますが、リアルタイムでは同等ではありません (もちろん、最小単位を考慮しない場合は、要素をドラッグして要素の位置を に設定するだけです)。マウスの位置、このとき、マウスの動きと要素の動きはリアルタイムでは等価であることがわかります。デモの説明に戻ると、Web ページ上でマウスを動かすと、ピクセルごとに動きます (マウスの動きの位置は console.log(e.pageX) で確認できます)。要素は 10 ピクセルごとに移動します。これが私たちの理解の鍵であり、デモ全体の鍵です。
上記の考え方を理解して、コードとコメントを組み合わせて、もう一度説明してください:
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title></title> <style> body{ margin:0px; padding:0px; } p{ margin:0px; padding:0px; } </style> <script src="js/jquery-1.11.2.js"></script> </head> <body> <p style="height: 600px;background: url(data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxMDAlIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPiAgIC A8ZGVmcz4gICAgICAgIDxwYXR0ZXJuIGlkPSJncmlkIiB3aWR0aD0iMTAiIGhlaWdodD0iMTAiIHBhdHRlcm5Vbml0cz0idXNlclNwYWNlT25Vc2UiPiAgICAgICAgICAgIDxwYXRoIGQ9Ik0gMTAgMCBMIDAgMCAw IDEwIiBmaWxsPSJub25lIiBzdHJva2U9IiNkZGRkZGQiIHN0cm9rZS13aWR0aD0iMSIgb3BhY2l0eT0iMSIgLz4gICAgICAgIDwvcGF0dGVybj4gICAgPC9kZWZzPiAgICA8cmVjdCB3aWR0aD0iMTAwJSIgaGVpZ 2h0PSIxMDAlIiBmaWxsPSJ1cmwoI2dyaWQpIiAvPjwvc3ZnPg==)"> <p id="bk" style="width:50px;height:50px;background: red;position: absolute"></p> </p> </body> <script> $(function(){ var orgX,orgY,eleX,eleY,hasMove=false; $("#bk").on("mousedown",function(e){ orgX= e.pageX; //记录鼠标的水平位置 orgY= e.pageY; //记录鼠标的垂直位置 eleX=$(this).offset().left; //记录元素的水平位置 eleY=$(this).offset().top; //记录元素的垂直位置 hasMove=true; //鼠标按下时标明当前元素可以拖拽标识 }); $(document).on("mousemove",function(e){ if(hasMove){ //当元素可以拖拽时执行操作 //新位置计算方法为元素的上次位置加上新的位移量 var left=eleX+Math.round( ( e.pageX - orgX ) / 10 ) * 10; var top= eleY+Math.round( ( e.pageY - orgY) / 10 ) * 10; //更新位置信息 $("#bk").css({ top:top, left:left }); } }).on("mouseup",function(e){ hasMove=false; //鼠标松开时设置元素不可拖拽 }); }) </script> </html>
その中で最も重要なコードは、
Math.round( ( e.pageX - orgX ) / 10 ) * 10;
です。要素の新しい変位を計算するには、要素が押されたときのマウスの位置を最新のマウスの位置から減算し、最小単位の 10 で割り、切り上げて整数値を取得し、最小単位の 10 を掛けます。要素が移動する単位距離を取得できます。これが理解できない場合は、コードを実行して自分で考えることができます。 (もちろん、Mach の天井法と床法も使用できます)。
上記は、要素をドラッグしてグリッドに揃える (毎回一定の距離を移動する) JavaScript の実装です。関連コンテンツの詳細については、PHP 中国語 Web サイト (www.php.cn) に注目してください。