我修復了一些優化代碼。
首先更新您的座標轉換爲這樣的:
#new-link-line {
-webkit-transform-origin: top center;
-moz-transform-origin: top center;
-o-transform-origin: top center;
-ms-transform-origin: top center;
transform-origin: top center;
}
其次,更新這樣的linkline left
CSS位置:
.css('left', offset.left + $(this).outerHeight()/2 - ($linkLine.width()/2));
這會達到預期的效果。
更新的jsfiddle:http://jsfiddle.net/25E8W/416/
全部更新JS:
// Store this now so you don't have to search DOM for it every time you do mousemove
var $op = $('#origin-point');
$op.mousedown(function() {
var $linkLine = $('<div id="new-link-line"></div>').appendTo('body');
var offset = $op.offset();
$linkLine
.css('top', offset.top + $(this).outerWidth()/2)
.css('left', offset.left + $(this).outerHeight()/2 - ($linkLine.width()/2));
$(document)
.mousemove(linkMouseMoveEvent)
.bind('mousedown.link', function(event) {
if(event.which == 3) {
endLinkMode();
}
})
.bind('keydown.link', function(event) {
// ESCAPE key pressed
if(event.keyCode == 27) {
endLinkMode();
}
});
});
function linkMouseMoveEvent(event) {
var offset = $op.offset();
if ($('#new-link-line').length > 0) {
var originX = offset.left + $op.outerWidth()/2;
var originY = offset.top + $op.outerHeight()/2;
var length = Math.sqrt(
(event.pageX - originX) * (event.pageX - originX) +
(event.pageY - originY) * (event.pageY - originY)
);
var angle = 180/3.1415 * Math.acos((event.pageY - originY)/length);
if (event.pageX > originX)
angle *= -1;
$('#new-link-line')
.css('height', length)
.css('-webkit-transform', 'rotate(' + angle + 'deg)')
.css('-moz-transform', 'rotate(' + angle + 'deg)')
.css('-o-transform', 'rotate(' + angle + 'deg)')
.css('-ms-transform', 'rotate(' + angle + 'deg)')
.css('transform', 'rotate(' + angle + 'deg)');
}
}
function endLinkMode() {
$('#new-link-line').remove();
$(document).unbind('mousemove.link').unbind('click.link').unbind('keydown.link');
}
您的jsfiddle不起作用在最新的Firefox ... – Derek 2014-10-10 09:05:50
太感謝你了馬丁。它的工作原理:) – Gulhan 2014-10-10 09:08:31
ow。 @Derek你的意思是代碼根本不起作用,或者只是設置中間點的東西? – Gulhan 2014-10-10 09:10:21