があります!私は#drag
要素が滑らかに動くことに問題があります。mousemoveイベントのJavascript移動要素60 FPS requestAnimationFrame
私はこの記事を見て:http://www.html5rocks.com/en/tutorials/speed/animations/#debouncing-mouse-events
それがいることを言った:移動要素がのMouseMoveイベントがそう
あまりを解雇されたときmousemove
イベントでの問題は、私は彼らの方法を使用してみてください」:使用しますboolean checking
ライブアクションのために、このフィドルで
外観:。https://jsfiddle.net/5f181w9t/
HTML:
<div id="drag">this is draggable</div>
CSS:
#drag {width:100px; height:50px; background-color:red; transform:translate3d(0, 0, 0); }
JS:
var el = document.getElementById("drag"),
startPosition = 0, // start position mousedown event
currentPosition = 0, // count current translateX value
distancePosition = 0, // count distance between "down" & "move" event
isMouseDown = false; // check if mouse is down or not
function mouseDown(e) {
e.preventDefault(); // reset default behavior
isMouseDown = true;
startPosition = e.pageX; // get position X
currentPosition = getTranslateX(); // get current translateX value
requestAnimationFrame(update); // request 60fps animation
}
function mouseMove(e) {
e.preventDefault();
distancePosition = (e.pageX - startPosition) + currentPosition; // count it!
}
function mouseUp(e) {
e.preventDefault();
isMouseDown = false; // reset mouse is down boolean
}
function getTranslateX() {
var translateX = parseInt(getComputedStyle(el, null).getPropertyValue("transform").split(",")[4]);
return translateX; // get translateX value
}
function update() {
if (isMouseDown) { // check if mouse is down
requestAnimationFrame(update); // request 60 fps animation
}
el.style.transform = "translate3d(" + distancePosition + "px, 0, 0)";
// move it!
}
el.addEventListener("mousedown", mouseDown);
document.addEventListener("mousemove", mouseMove);
document.addEventListener("mouseup", mouseUp);
が、これはそれをaccompolishedするための正しい方法は何ですか?
私のコードに何が問題なのですか?
おかげ
あなたのコードに何が問題なのですか?コメントするためにKaiidoに感謝します。 – Kaiido
本当に?私は、本当に滑らかではないように感じる? –
私のFFでは完全に滑らかですが、クロムで少し点滅していますが、これは本当ですが、確かにこの赤色のためです。 – Kaiido