ズーム値に合わせてマウスの位置を調整する必要があります。
ズーム値を0.5
に設定したとします。マウスの位置(xとy)を同じ値に調整する必要があります。したがって、この正確な問題を解決するには、スケール値で除算するだけの簡単な処理を行うことができます:var mPos = {x: (e.clientX/0.5) - elPos.x, y: (e.clientY/0.5) - elPos.y };
。
スクリプトでスケール/ズーム値を処理できるようにして、スクリプトの変数として設定できるようにすることを強くお勧めします。私。このような何か:
(function() {
var scaleValue = 0.5;
addZoom(scaleValue);
var $container = $('#container');
var $slider = $('#slider');
var sliderW2 = $slider.width()/2;
var sliderH2 = $slider.height()/2;
var radius = 200;
var deg = 0;
var elP = $('#container').offset();
var elPos = { x: elP.left, y: elP.top};
var X = 0, Y = 0;
var mdown = false;
$('#container')
.mousedown(function (e) { mdown = true; })
.mouseup(function (e) { mdown = false; })
.mousemove(function (e) {
if (mdown) {
var mPos = {x: (e.clientX/scaleValue) - elPos.x, y: (e.clientY/scaleValue) - elPos.y };
var atan = Math.atan2(mPos.x-radius, mPos.y-radius);
deg = -atan/(Math.PI/180) + 180; // final (0-360 positive) degrees from mouse position
X = Math.round(radius* Math.sin(deg*Math.PI/180));
Y = Math.round(radius* -Math.cos(deg*Math.PI/180));
$slider.css({ left: X+radius-sliderW2, top: Y+radius-sliderH2 });
// AND FINALLY apply exact degrees to ball rotation
$slider.css({ WebkitTransform: 'rotate(' + deg + 'deg)'});
$slider.css({ '-moz-transform': 'rotate(' + deg + 'deg)'});
//
// PRINT DEGREES
$('#value').html('angle deg= '+deg);
}
});
})();
function addZoom(scaleValue) {
$('#zoom-container').css('zoom', scaleValue);
}
フィドル: https://jsfiddle.net/mqgfxkjf/10/
あなたはちょうど私の長い試験研究の3日間保存しました。ありがとうございました。 – user7453632
喜んで助けてください!私は最近似たような仕事をしていますので、あなたの問題はかなり早く気付きました! :P – chrisv
これを完璧にするには、0.5の代わりにscaleValueを追加します。 var mPos = {x:(e.clientX/scaleValue) - elPos.x、y:(e.clientY/scaleValue) - elPos.y}; – user7453632