請問jsFiddle是做你想做的嗎?
它使用鼠標最近的角落而不是最遠的角落。當鼠標位於任何角落時,它會顯示0%,而鼠標接近目標時顯示正的百分比,即使目標是偏離中心的。
(function() {
var mX
, mY
, distance
, $distance = $('#distance')
, $element = $('#thetarget')
, maxMouseDistance
, relativeDistance;
var theWidth = $(document).width();
var theHeight = $(document).height();
$("#theWidth").text(theWidth);
$("#theHeight").text(theHeight);
function pythagoras(length, height) {
var length2 = length * length
, height2 = height * height
return Math.sqrt((length2 + height2));
}
/**/
var target = $("#thetarget");
target.css({
cursor: "default"
, border: "1px solid black"
, margin: 0});
var position = target.position(); // top left of target element
var tX = Math.floor(position.left)
var tY = Math.floor(position.top)
$("#targetPosition").text(tX + ":" + tY);
var corners = [
[0, 0]
, [theWidth, 0]
, [theWidth, theHeight]
, [0, theHeight]
]
function distanceToNearestCorner(x, y) {
var cornerX = x < tX ? 0 : theWidth
var cornerY = y < tY ? 0 : theHeight
return pythagoras(cornerX - tX, cornerY - tY)
}
/*Mouse movement tracking*/
$(document).mousemove(function (e) {
/*Get mouse coordinates*/
mX = e.pageX;
mY = e.pageY;
/*calculate distance between mouse and element*/
distance = pythagoras(tX - mX, tY - mY);
maxMouseDistance = distanceToNearestCorner(mX, mY)
relativeDistance = ((maxMouseDistance - distance)/maxMouseDistance);
$distance.text(distance);
var decimals = distance/100;
var percents = 100 - (distance/100);
$("#mouse").text(mX + ":" + mY);
//$("#distanceDecimals").text(decimals);
//$("#dFarCorner").text(maxDistance);
$("#md2FarCorner").text(maxMouseDistance);
$("#formula").text("(E to C max/M to C max)/(M to E distance/100)");
$("#theNumber").text(relativeDistance);
$('.fill').width((relativeDistance * 100) + "%");
});
})();
它不會更新所有字段,但它會更新進度欄。
原來的答覆
你似乎有很多的功能,在那裏它們不會被調用。
這裏有一個,我已經重寫了...但它不會被調用:
function calculateDistance(elem, mouseX, mouseY) {
var deltaX = elem.offset().left - mouseX;
var deltaY = elem.offset().top - mouseY;
var delta2 = deltaX * deltaX + deltaY * deltaY;
var delta = Math.floor(Math.sqrt(delta2))
return delta
}
var elem = document.getElementById("targetPosition")
var relativeDistance = calculateDistance(elem , mX, mY)
在我的實現,elem
是你認爲的目標的HTML元素。我的函數是畢達哥拉斯定理的一個應用:它返回沿x軸和y軸的目標距離的一些距離的平方根,給出鼠標和目標之間最短線的長度。
當我將此插入到jsFiddle中時,當光標位於「目標」的「T」上方時,M2E距離字段中會出現0。
這是你在找什麼?
...在一個平面上有一個與點相同距離的點的名稱。它被稱爲一個圓圈。除此之外:有點與你感興趣的點相差太遠,這是錯誤的嗎? – Burki
爲什麼不簡單地取目標中心的座標並計算鼠標指針和中心之間的距離。然後你可以用百分比表示這個距離。 – rashmatash
感謝這兩個評論。 @Burki,我的觀點是隻有當光標位於某個目標元素上時,才能填充該條。你會如何建議我用圓來衡量從光標到目標的百分比距離? – Shamppi