0

我有以下旋转图像的功能

function rotateImage(offsetSelector, xCoordinate, yCoordinate, imageSelector){

var x = xCoordinate - offsetSelector.offset().left - offsetSelector.width()/2;
var y = -1*(yCoordinate - offsetSelector.offset().top - offsetSelector.height()/2);
var theta = Math.atan2(y,x)*(180/Math.PI);        

var rotate = 'rotate(' + theta + 'deg)';
imageSelector.css('-moz-transform', rotate);
}

但是,当我用以下方式调用它时,它只会在鼠标按下时执行一次。

$('#someImage').on('mousedown', function(event){
        rotateImage($(this).parent(), event.pageX,event.pageY, $(this));    
});

我的意图是让图像在被抓取时旋转,直到用户放开鼠标点击。有没有一种简单的方法可以在不使用外部库的情况下做到这一点?

4

3 回答 3

1

例子:

var timer;
function rotateImageTimer(offsetSelector, xCoordinate, yCoordinate, imageSelector)
{
    timer = setInterval("rotateImage('"+offsetSelector+"', '"+xCoordinate+"', '"+yCoordinate+"', '"+imageSelector+"')", 100);
}


function rotateImage(offsetSelector, xCoordinate, yCoordinate, imageSelector){
    var x = xCoordinate - offsetSelector.offset().left - offsetSelector.width()/2;
    var y = -1*(yCoordinate - offsetSelector.offset().top - offsetSelector.height()/2);
    var theta = Math.atan2(y,x)*(180/Math.PI);        

    var rotate = 'rotate(' + theta + 'deg)';
    imageSelector.css('-moz-transform', rotate);      
}


$('#someImage').on('mousedown', function(event){
    rotateImageTimer($(this).parent(), event.pageX,event.pageY, $(this));  
});

$('#someImage').on('mouseup', function(event){
    clearIneterval(timer);   
});
于 2012-04-13T05:51:34.747 回答
0

您需要在 mousedown 时使用 setInterval 重复调用某些代码,并在 mouseup 时取消它。

可以在这里找到一个例子:http: //www.codingforums.com/showthread.php?t=166115

关于 setInterval 和 setTimeout 的一些信息:http ://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

于 2012-04-13T05:49:20.840 回答
0
    var isMouseDown = false;

$('#someImage').on('mousedown', function(event){
isMouseDown = true;
        rotateImage($(this).parent(), event.pageX,event.pageY, $(this));    
});
$('#someImage').on('mouseup', function(event){
isMouseDown = false;

});


function rotateImage(offsetSelector, xCoordinate, yCoordinate, imageSelector){
   while(isMouseDown){
 var x = xCoordinate - offsetSelector.offset().left - offsetSelector.width()/2;
    var y = -1*(yCoordinate - offsetSelector.offset().top - offsetSelector.height()/2);
    var theta = Math.atan2(y,x)*(180/Math.PI);        

    var rotate = 'rotate(' + theta + 'deg)';
    imageSelector.css('-moz-transform', rotate);    
}// end of while  
}

在上面的代码中,我有一个变量isMouseDown。当鼠标向下时,它设置为true. 虽然它是真实的,但您的图像应该旋转。我也在绑定事件mouseup。当它被调用时,isMouseDown被设置为false. 因此停止旋转。

当我需要在鼠标按下时在画布上绘图并在鼠标再次升起时停止时,我对我的绘图应用程序使用相同的技术。希望能帮助到你 :)

于 2012-04-13T06:19:05.820 回答