js过去html元素鼠标事件,使用JS(鼠标事件)来拖拉HTML元素

JavaScript

语言:

JaveScriptBabelCoffeeScript

确定

var pin = document.getElementById("pin");

var mouseStartPosition = {

x: 0,

y: 0

};

var pinStartPosition = {

x: 0,

y: 0

};

var targetPosition = {

x: 0,

y: 0

};

var pinPosition = {

x: 0,

y: 0

};

var velocityX = 0;

pin.addEventListener("mousedown", mousedown);

function mousedown(e) {

// get mouse position

mouseStartPosition.x = e.pageX;

mouseStartPosition.y = e.pageY;

// update target position for pin - shift pin to just above where mouse is

targetPosition.x -= (35 - e.offsetX);

targetPosition.y -= (115 - e.offsetY);

// update the pin start position

pinStartPosition.x = targetPosition.x;

pinStartPosition.y = targetPosition.y;

// add listeners for mousemove, mouseup

window.addEventListener("mousemove", mousemove);

window.addEventListener("mouseup", mouseup);

}

function mousemove(e) {

// get velocity of x (affects rotation)

velocityX = pinStartPosition.x + e.pageX - mouseStartPosition.x - targetPosition.x;

if (velocityX < -25) velocityX = -25;

if (velocityX > 25) velocityX = 25;

// update position - pin start + (current mouse - start mouse)

targetPosition.x = pinStartPosition.x + e.pageX - mouseStartPosition.x;

targetPosition.y = pinStartPosition.y + e.pageY - mouseStartPosition.y;

}

function mouseup(e) {

// reset rotation to 0

velocityX = 0;

// update position for final time

targetPosition.x = pinStartPosition.x + e.pageX - mouseStartPosition.x;

targetPosition.y = pinStartPosition.y + e.pageY - mouseStartPosition.y;

// "drop" pin

targetPosition.y += 15;

// remove listeners

window.removeEventListener("mousemove", mousemove);

window.removeEventListener("mouseup", mouseup);

}

function loop() {

requestAnimationFrame(loop);

// lerp pin to target - http://codepen.io/rachsmith/post/animation-tip-lerp

pinPosition.x += (targetPosition.x - pinPosition.x) * 0.2;

pinPosition.y += (targetPosition.y - pinPosition.y) * 0.2;

// update CSS of pin

var pos = pinPosition.x + "px, " + pinPosition.y + "px, 0px";

pin.style.transform = "translate3d(" + pos + ") rotateZ(" + -velocityX + "deg)";

}

loop();

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值