2

まず、助けてくれてありがとう。:)

JSFiddle コード

JSFiddle フルスクリーン

上記のフィドル リンクでわかるように、「きらめく効果」を作成しようとして 1400 個のオブジェクトをアニメーション化しています。ユーザーがマウスを速く動かすと、より多くの六角形が完全に不透明になり、フェードアウト率が変化します。フィドルのバージョンは、スペースを十分な色で満たしますが、ぎくしゃくしてぎこちなく感じます. fade_time 変数の量を減らすと、滑らかになりますが、完全に不透明な六角形が十分にありません。最終的な目標は、六角形で単語を綴ることです。

Chrome でのパフォーマンスは最高ですが、FireFox と IE ではそれほどではありません。iPad のモバイル サファリで (Raphael の element.touchmove を使用して) テストしたところ、さらに悪化しました。

パフォーマンスを向上させるために、コードのどの部分を別の方法で実行できるかについてのアドバイスを探しています。

他の誰かがパフォーマンスに役立つはずだったこの回答を見ましたが、アニメーション化する六角形の量をカーソルの動きに基づいて設定しようとしていますが、タイマーでそれを実行できるかどうかはわかりません。

キャンバスを使用して言及されたこの回答:

良い代替手段は、Canvas を使用して要素を描画することです。私の実験では、この数の描画では SVG よりも高速ですが、いくつかのアニメーションを使用している場合、RaphaelJS ライブラリよりも実装が難しくなります。

コードがアニメーションを使用していても、それは人々にとってより良いルートのように思えますか?

Raphael.js を使用するのはこれが初めてです。私は一般的にJSの経験があまりないので、どんな助けもwunderbarです!

編集:編集: また、質問者が考えていたよりも .resize が呼び出される回数についてのこの回答を見て、.mousemove 関数が予想よりも多く (必要以上に) 呼び出される可能性があるかどうか疑問に思いました。

4

1 に答える 1

1

「重複した」アニメーションで窒息すると思います。たとえば、次のようになります。

  1. 六角形の番号 #6 はフェードを開始します
  2. フェードの半分で、別のフェードが開始されます

stop()予期しない結果を回避するための指示を追加しました。

さらに、 for() サイクルは、別のアニメーションが進行中であるかどうか、またはサイクル内で 16 進数が 2 回以上ランダムに選択されているかどうかをチェックしません。これを回避するために、ベクトルを追加してアニメートされている六角形のインデックスをキャッシュしましたが、あまり役に立たないようです。

保存された (役に立たない) アニメーションの数を確認するには、最後のconsole.log().

その上、あなたのgetRandomInt()関数はいくつかの未定義のインデックス エラーを生成しました (配列インデックスが 0 から 1399 になり、0 から 1400 の間の整数を返すため... 変更しました。

ここで私のアドオンを参照してください: http://jsfiddle.net/rz4yY/46/

于 2012-09-10T12:54:31.197 に答える