Heim  >  Artikel  >  Web-Frontend  >  JavaScript implementiert das Ziehen von Elementen, um sie am Raster auszurichten (wobei jedes Mal eine feste Entfernung verschoben wird).

JavaScript implementiert das Ziehen von Elementen, um sie am Raster auszurichten (wobei jedes Mal eine feste Entfernung verschoben wird).

黄舟
黄舟Original
2017-02-20 14:38:481832Durchsuche

In den letzten Tagen habe ich an einer zusätzlichen Funktion zum Ziehen von Elementen gearbeitet, die darin besteht, sich am Raster auszurichten. Tatsächlich bedeutet dies, die Anfangsposition des Elements zu bestimmen und es dann um einen festen Abstand zu verschieben jedes Mal, wenn Sie es ziehen. Ermöglicht die Ausrichtung von Elementen innerhalb des Rasters. Schauen wir uns zuerst die Darstellungen an und erklären wir dann die Details im Detail.

JavaScript implementiert das Ziehen von Elementen, um sie am Raster auszurichten (wobei jedes Mal eine feste Entfernung verschoben wird).

Sie können sehen, dass sich jedes Element entsprechend der Mindestentfernung bewegt. Und jedes Mal werden die Elemente am Raster ausgerichtet.

Erklären Sie zunächst die Ideen und Details basierend auf der Demo. Der Democode wird später bereitgestellt.

1. Bestimmen Sie die Mindesteinheit jeder Bewegung des Elements (10 Pixel und 10 Pixel in der Demo), d. h. jede horizontale oder vertikale Verschiebung beträgt 10 Pixel. Das Auflegen einer Ebene mit Rasterhintergrund soll uns helfen, den Effekt besser zu erkennen (jedes Raster in der Demo ist ebenfalls 10 Pixel * 10 Pixel groß).

2. Um den Effekt deutlicher zu sehen, werden die Breite und Höhe des Elements (beide sind Vielfache von 10 Pixel) und die Standardposition (ebenfalls ein Vielfaches von 10 Pixel) initialisiert. Beispiel: Die Breite und Höhe des Elements betragen 50 Pixel * 50 Pixel und die Anfangsposition des Elements beträgt 0xp * 0 Pixel. Dies hat den Vorteil, dass beim ersten Laden garantiert werden kann, dass das Element eine ganze Zahl kleiner Gitter abdeckt (d. h. 5 * 5 kleine Gitter) und dass es keine unvollständige Abdeckung des Gitters gibt. Dieser Artikel soll eigentlich verhindern, dass sich Benutzer oder Menschen mit Zwangsstörungen so viele Sorgen machen müssen. Es handelt sich eigentlich nur um eine Operation zur Verschönerung der Platzierungsposition. Freunde, die verstehen, müssen nicht so überlegt sein, sie müssen einfach verstehen.

3. Das Wichtigste ist, wie man festlegt, wann man sich um eine feste Distanz bewegen muss. Über diesen Demoeffekt muss man eines verstehen: Mausbewegung und Elementbewegung entsprechen sich, sind aber in Echtzeit nicht äquivalent (natürlich, wenn Sie nicht die kleinste Einheit berücksichtigen und einfach das Element ziehen und dann die Position des Elements festlegen). zur Mausposition. Zu diesem Zeitpunkt kann verstanden werden, dass Mausbewegung und Elementbewegung in Echtzeit gleichwertig sind. Zurück zu den Demoanweisungen: Wenn sich die Maus auf der Webseite bewegt, bewegt sie sich Pixel für Pixel (Sie können die Position der Mausbewegung über console.log (e.pageX) beobachten). Das Element bewegt sich alle 10 Pixel. Dies ist der Schlüssel zu unserem Verständnis und der Schlüssel zur gesamten Demo.

Nachdem ich die oben genannten Ideen in Kombination mit dem Code und den Kommentaren verstanden habe, möchte ich es noch einmal erklären:

<!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>



Der obige Code gibt mehr Details Kommentare, unter denen der kritischste Code ist

Math.round( ( e.pageX - orgX ) / 10 ) * 10;



Dieser Code dient zur Berechnung der neuen Verschiebung des Elements durch Subtrahieren der Position des Elements von der letzten Position der Maus Die Mausposition beim Drücken wird durch die Mindesteinheit von 10 dividiert, gerundet, um einen ganzzahligen Wert zu erhalten, und dann mit der Mindesteinheit von 10 multipliziert. Sie können die Einheitsdistanz ermitteln, um die sich das Element bewegen soll. Wenn Sie das nicht verstehen, können Sie den Code ausführen und selbst darüber nachdenken. (Natürlich können Sie auch Machs Decken- und Bodenmethoden verwenden.)

Das Obige ist die JavaScript-Implementierung zum Ziehen von Elementen, um sie am Raster auszurichten (jedes Mal um einen festen Abstand verschieben). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.org). .php.cn)!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn