0

オンラインで見つけた無限回転ギャラリーを実行するこのコードがありますが、今私の問題は、フレームに入るとジャンプして速すぎることです。ロゴの外に出た後と同じくらい速くしたい.

コードは次のとおりです。

//Import TweenMax
import com.greensock.TweenMax;

//Save the horizontal center
var centerX:Number = stage.stageWidth / 2;

//Save the width of the whole gallery
var galleryWidth:Number = infiniteGallery.width;

//Speed of the movement (calculated by the mouse position in the moveGallery() function)
var speed:Number = 0;

//Add an ENTER_FRAME listener for the animation
addEventListener(Event.ENTER_FRAME, moveGallery);

function moveGallery(e:Event):void {

 //Calculate the new speed
 speed = -(0.02 * (mouseX - centerX));

 //Update the x coordinate
 infiniteGallery.x+=speed;

 //Check if we are too far on the right (no more stuff on the left edge)
 if (infiniteGallery.x>0) {

  //Update the gallery's coordinates
  infiniteGallery.x= (-galleryWidth/2);
 }

 //Check if we are too far on the left (no more stuff on the right edge)
 if (infiniteGallery.x<(-galleryWidth/2)) {

  //Update the gallery's coordinates
  infiniteGallery.x=0;
 }
}

ここにデモがあります »

4

1 に答える 1

2

スクローラーの速度は、次の 3 つの要素に基づいています。

1- フレームレート。ENTER_FRAME イベント ハンドラーはフレームごとに呼び出されるため、フレーム レートの影響を直接受けます。

2-速度減衰数。あなたの場合、これは 0.02 です。スクロールを遅くしたい場合は、この数値を小さくしてください。速度を半分にするには 0.01 を試してください。

3- ステージの中心 x 座標までのマウス ポインターの距離。マウス ポインターとステージの中心との差に、スピード ダンピングの数値を掛けます。中央の変更またはその付近にいるときに移動を停止する場合は、次のようにコーディングします。

var buffer:Number = 50;

function moveGallery(e:Event):void {
    var diff = mouseX - centerX;
    if (Math.abs(diff) > buffer) 
        speed = -(0.02 * (diff + (diff > 0 ? -buffer : buffer)));
    else
        speed = 0;

要求に応じて:

var centerX:Number = stage.stageWidth / 2;
var galleryWidth:Number = infiniteGallery.width;
var speed:Number = 0;
addEventListener(Event.ENTER_FRAME, moveGallery);

var buffer:Number = 100;

function moveGallery(e:Event):void {
    var diff = mouseX - centerX;
    if (Math.abs(diff) > buffer) 
        speed = -(0.02 * (diff + (diff > 0 ? -buffer : buffer)));
    else
        speed = 0;

    infiniteGallery.x += speed;

    if (infiniteGallery.x>0) {
        infiniteGallery.x = -galleryWidth / 2;
    }

    if (infiniteGallery.x < -galleryWidth / 2) {
        infiniteGallery.x = 0;
    }
}
于 2010-01-20T16:50:11.023 に答える