2012-05-08 2 views
1

マウスの位置にゆっくりと続くdivがいくつかあります。 begenningでは、それはうまく始まりますが、マウスの位置に近づくほど、遅くなります。私は以下の非常に効率的なコードを持っていますが、私はそれを改善したいので、divはいつも変化するものよりも一定の速度でマウスをたどります。マウスの位置に追従するオブジェクトが遅くなります

var xp = x, yp = y; 
var loop = setInterval(function(){ 
xp += ((mouseX - xp))/100; 
yp += ((mouseY - yp))/100; 
object.css({left:xp, top:yp}); 
},20);} 

数値が近づくと100でダイビングするので、数値が小さくなり、X/Yが遅くなります。私はそれがどこから来ても同じスピードを保つことを望んでいます。

+1

あなたはdiv要素がマウスに接続されているように、それは思えるしますか、またはあなたがより多くあります尾のような行動に興味がありますか?この回答のようなもの:http://stackoverflow.com/a/3385953/74757 –

+0

@Coryはい私は尻尾のような振る舞いに興味があります。たとえば、マウスを動かすとdivが続き、マウスの位置に達するまで約2秒かかります。上のコードはこれを示していますが、接近するにつれて速度が遅くなり、速度を維持したいだけです。 – Zakukashi

答えて

2

は、ソリューションです:

var loop = setInterval(
    function() 
    { 
     speed = 20; 
     xp += (mouseX - xp)>speed ? speed : ((mouseX - xp)<-speed ? -speed : (mouseX - xp)); 
     yp += (mouseY - yp)>speed ? speed : ((mouseY - yp)<-speed ? -speed : (mouseY - yp)); 
     object.css({left:xp, top:yp}); 
    },20 
); 
+0

これはほとんど機能しましたが、元のコードほど滑らかではありません。元のdivはスムーズに続きますが、divのY位置はmouseYより大きいときに移動します – Zakukashi

+0

もちろん、(mouseX-xp)は負の値になることがあります。私は解決策を編集しました。 – mostar

+0

優秀!ありがとうございました – Zakukashi

0

Webワーカーを使ってみましたか?

Webワーカーを使用すると、「重い」タスクをバックグラウンドスレッドで送信して、UIスレッドが低速にならず、Webアプリケーションが応答性を保つようにできます。

セットアップは非常に簡単です。

var worker = new Worker('someWorker.js'); 

は、見てください:ここで

https://developer.mozilla.org/En/Using_web_workers

+0

これらはすべてのブラウザで利用できますか?非常に興味深いのは – Bryan

+0

@BryanMoyles Chrome 3+、Firefox 3.5+、IE 10+、Opera 10.6+、Safari 4+ - そのリンクの最下部にある – Ozzy

+0

Chrome、FireFox、Safariでユーザーに更新を促し、99%彼らのユーザーはそれ以降のバージョンになっているので、それは問題ありません。 (これらの3つは、ブラウザ市場の約85%を占める)。私はOperaについてよく知らないし、IEはまだサポートされていない。なぜなら、ほとんどのIEユーザーはIE8とIE9にいるからだ。 – Ozzy

関連する問題