2016-09-19 5 views
2

私はマウスのカーソルに従っている画像を持っています。JavaScriptでカーソルに続く画像をどのように回転させるのですか?

HTML:

<img id="cow" src="https://icons.iconarchive.com/icons/gakuseisean/ivista-2/128/Alarm-Arrow-Right-icon.png" height="30px" width="30px" style="position: absolute; top: 50%; left: 50%;"/> 

Javascriptを:

var mouseXY = {}; 
$(document).on("mousemove", function(event) { 
    mouseXY.X = event.pageX; 
    mouseXY.Y = event.pageY; 
}); 
var iCow = $("#cow"); 
var cowInterval = setInterval(function() 
{ 
    var cowXY = iCow.position(); 
    var diffX = cowXY.left - mouseXY.X; 
    var diffY = cowXY.top - mouseXY.Y; 
    var newX = cowXY.left - diffX/1000; 
    var newY = cowXY.top - diffY/1000; 
    iCow.css({left: newX, top: newY}); 
}, 10); 

JSFiddle example

がどのように私は、カーソルの方向に画像を回転させることができますか?
私はtransform: rotate()でそれを行うことを試みた:

var cowInterval = setInterval(function() 
{ 
    var cowXY = iCow.position(); 
    var diffX = cowXY.left - mouseXY.X; 
    var diffY = cowXY.top - mouseXY.Y; 
    var newX = cowXY.left - diffX/1000; 
    var newY = cowXY.top - diffY/1000; 
    var tan = diffX/diffY; 
    var atan = Math.atan(tan); 
    iCow.css({left: newX, top: newY, transform: "rotate(" +((-1)*atan - Math.PI/2)+ "rad)"}); 
}, 10); 

が、失敗した

+1

私はこの問題は、get '位置()'であると思います。移動しなくても、位置の値は変換回転だけで変化し続けます。コンソールログが表示されます。 https://jsfiddle.net/q9kn8ady/4/ – cjmling

+0

は問題ではないかもしれないコメントや本当の原因が、とにかく画像回転のために上に私は、より正確な回転であると思われるこのフィドルを見つけました。 http://jsfiddle.net/22Feh/556/ここからhttp://stackoverflow.com/questions/7195825/how-to-rotate-image-in-relation-to-mouse-position – cjmling

+0

ます。http:// jsfiddle。ネット/ 22Feh/5 /: - uはしようとすると、http://stackoverflow.com/questions/7195825/how-to-rotate-image-in-relation-to-mouse-position –

答えて

2

カーソルpostionを変更するときは、カーソルが実際に変更されたことを念頭に置いて、のみ(回転)変換CSSプロパティを変更する必要がありますポジション。私は、これはあなたが望むものであると仮定し

if(diffY > 0 && diffX > 0) { 

    atan += 180; 
    } 
else if(diffY < 0 && diffX > 0) { 

    atan -= 180; 
    } 

正しい方向に回転

は画像を作るためにこれら二つのif-else条件を追加します。

var mouseXY = {}; 
 
    $(document).on("mousemove", function(event) { 
 
     mouseXY.X = event.pageX; 
 
     mouseXY.Y = event.pageY; 
 
    }); 
 
    var iCow = $("#cow"); 
 
    var prevXY = {X: null, Y: null}; 
 
    var cowInterval = setInterval(function() 
 
    { 
 
    
 
     
 
     if(prevXY.Y != mouseXY.Y || prevXY.X != mouseXY.X && (prevXY.Y != null || prevXY.X != null)) { 
 
     
 
     var cowXY = iCow.position(); 
 
     var diffX = cowXY.left - mouseXY.X; 
 
     var diffY = cowXY.top - mouseXY.Y; 
 
     var tan = diffY/diffX; 
 
     
 
     var atan = Math.atan(tan)* 180/Math.PI;; 
 
     if(diffY > 0 && diffX > 0) { 
 
     
 
     \t atan += 180; 
 
     } 
 
     else if(diffY < 0 && diffX > 0) { 
 
     
 
     \t atan -= 180; 
 
     } 
 
     
 
     prevXY.X = mouseXY.X; 
 
     prevXY.Y = mouseXY.Y; 
 
     iCow.css({transform: "rotate(" + atan + "deg)"}); 
 
    } 
 
    }, 10);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<img id="cow" src="https://icons.iconarchive.com/icons/gakuseisean/ivista-2/128/Alarm-Arrow-Right-icon.png" height="30px" width="30px" style="position: absolute; top: 50%; left: 50%;"/>

+0

ニースsoultionスタートですが、主な問題はあるに動きを回転と組み合わせる – Ilya

+0

動きをどのように実行しますか?少し説明していただけますか –

関連する問題