我一直在研究一個腳本,它將可拖動的div限制爲一個圓(而不是矩形父div)。我發現這個線程:How to constrain movement within the area of a circle似乎解決了我的一些問題。我已經獲得了適當的功能,當我在拖動功能中調用這些函數時,它將返回div的正確位置。我知道這一點,因爲我可以在拖動功能中檢查控制檯日誌,並檢查div的位置。但是,我的問題是,我似乎無法在拖動事件期間設置實際位置。控制檯報告正確的位置值,但div實際上不會受限於圓形邊界。例如,如果我將div拖動到圓的中心,然後垂直移過圓的邊界... div不會停在圓上,但控制檯會將位置固定爲[0,50]// 50是Y軸上X &中圓的中心。我讀過其他一些線程,我可能不得不使用助手對象,但我似乎沒有得到任何方法。我發佈了一個簡單的例子,希望有人能夠提供幫助。謝謝。使用jquery draggable div拖動期間的設置位置
this.light = document.createElement("div");
this.light.style.position='absolute';
this.light.style.left="20px";
this.light.style.top="40px";
this.light.style.width="20px";
this.light.style.height="20px";
$(parentdiv).append(this.light);
var circle_cenx = 50.0;
var circle_ceny = 50.0;
var circle_radius = 50.0;
$(this.light).draggable({
drag: function(event, ui){
var position = $(that.light).position();
var result = limit(position.left+10, position.top+10, circle_cenx, circle_ceny);
$(that.light).css({'top': result.y, 'left': result.x});
position = $(that.light).position();
console.log(position);
}
});
function limit(x, y, cenx, ceny) {
var dist = distance([x, y], [cenx, ceny]);
if (dist <= circle_radius) {
return {x: x, y: y};
}
else {
x = x - circle_cenx;
y = y - circle_ceny;
var radians = Math.atan2(y, x);
return {
x: Math.cos(radians) * circle_cenx + circle_radius,
y: Math.sin(radians) * circle_ceny + circle_radius
}
}
}
function distance(dot1, dot2) {
var x1 = dot1[0],
y1 = dot1[1],
x2 = dot2[0],
y2 = dot2[1];
return Math.sqrt(Math.pow(x1 - x2, 2) + Math.pow(y1 - y2, 2));
}
我也是,我發現這個問題,運行到同一個問題後,今天。在拖動功能期間設置助手偏移或位置似乎沒有任何作用。你有沒有找到答案? – emrys57 2013-02-28 17:10:45