【发布时间】:2016-04-03 19:30:01
【问题描述】:
我构建了以下调整大小脚本 - 正如您从小提琴中看到的那样,它适用于放大但不能缩小:
https://jsfiddle.net/calipoop/a37aeb08/
var item = document.getElementById('item'),
btn = document.getElementById('resizeBtn'),
s = 1;
btn.addEventListener('mousedown', initResize);
function initResize(e) {
var startS = s, startX = e.clientX, startY = e.clientY, dx, dy, d;
window.addEventListener('mousemove', resize);
window.addEventListener('mouseup', killResize);
function resize(e) {
dx = startX - e.clientX;
dy = startY - e.clientY;
d = Math.round(Math.sqrt(dx * dx + dy * dy));
s = startS + (d * .001);
item.style.transform = "scale(" + s + ")";
}
function killResize() {
window.removeEventListener('mousemove', resize);
window.removeEventListener('mouseup', killResize);
}
}
我尝试通过将行列式/叉积用于正/负方向来解决问题:
https://jsfiddle.net/calipoop/zbx3us36/
det = (startX*e.clientY) - (e.clientX*startY);
dir = (det >= 0) ? 1 : -1; //get direction from sign of determinant
d = Math.round(Math.sqrt(dx * dx + dy * dy)) * dir;
正如您从小提琴中看到的那样,现在它“有时”会缩小,而且总是很跳跃。
任何有想法的数学专业的?我是否错误地获得了行列式?提前感谢您提供任何见解。
【问题讨论】:
标签: javascript resize geometry determinants pythagorean