ドラッグ可能なウィンドウを角度2で実装したいと思っていましたが、これは最初にa codepenで試しました。HTML5ドラッグアンドドロップがマウスイベントと比べて遅いのはなぜですか
しかし、プレーンJavaScriptを使用していても、どこでも使用されている普通の古いマウスイベントに比べて非常に遅いようです。
私の例はSafariでテストされていますが、この例はChrome/Firefoxでは動作しないことが分かっていましたが、Chromeはdrag
というエラーを発生し、Firefoxはdrag
イベントでマウスの位置を公開しません。
また、この例はChromeの方がはるかに優れているため、ゼロからノーラグを生成できます。私はreference on StackOverflowが、Safariが遅れている唯一のものだと判断しました。 2だけ角度と
"use strict"
let el = document.getElementById("window")
let anchor = { x: 0, y: 0 }
let begin = { x: 0, y: 0 }
let newPosition = { x: 0, y: 0 }
let needsRedraw = false
let use = "drag"
if (use == "drag") {
el.draggable = "true"
el.addEventListener('dragstart', event => {
begin = { x: Number.parseInt(el.style.left),
y: Number.parseInt(el.style.top) }
anchor = { x: event.clientX, y: event.clientY }
})
document.addEventListener('drag', event => {
let dx = event.clientX - anchor.x
let dy = event.clientY - anchor.y
newPosition = { x: begin.x + dx, y: begin.y + dy }
needsRedraw = true
})
} else if (use == "click") {
let moving = false
el.addEventListener('mousedown', event => {
moving = true
begin = { x: Number.parseInt(el.style.left),
y: Number.parseInt(el.style.top) }
anchor = { x: event.clientX, y: event.clientY }
})
document.addEventListener('mousemove', event => {
if (moving) {
let dx = event.clientX - anchor.x
let dy = event.clientY - anchor.y
newPosition = { x: begin.x + dx, y: begin.y + dy }
needsRedraw = true
}
})
document.addEventListener('mouseup', event => {
moving = false
})
}
function draw() {
requestAnimationFrame(draw)
if (needsRedraw) {
el.style.left = newPosition.x + "px"
el.style.top = newPosition.y + "px"
needsRedraw = false
}
}
requestAnimationFrame(draw)
どのブラウザを使用しますか? – ste2425
が質問に追加されました。私は主にSafariでテストしました。この例はChromeで完全には機能しません。Chromeのパフォーマンスは大幅に向上しています。 –