marquee の挙動(スクロール)について
今までもPC版のミニプレーヤでは対応していましたが、今回改めて動作確認していますので解説します。
設計的には「メディアプレーヤでタイトル表示される場合」を想定しています。
-
表示領域と文字列のはみ出し検知について
実は非表示で文字列幅を検知するためのだけの領域が存在します。
楽曲・アルバム・アーティスト名の文字列をこの領域に複写し、
同時に領域の文字列サイズを表示するサイズに合わせて文字列の横幅を計測します(これをaと称する)。
元々の文字列表示領域の横幅(これをbと称する)は固定であるため、
a>b ならば表示領域を超えたと判断してスクロールさせるというわけです。 -
スクロール不要時の表示位置について
領域によって異なります。
①ミニプレーヤの楽曲名、アルバム名
左寄せ
②ミニプレーヤのアーティスト名
右寄せ
③カバーアートモードの各情報
中央寄せ -
スクロール時の初期状態について
左寄せで文字列が表示されます。
(当然右端に文字列がはみ出る状態です)
2秒間静止状態になります。 -
スクロールの挙動について
左方向に文字列がスクロールします。
文字列が領域外に出る前に、若干の空白のあとで右から先頭文字列が表示されます。
右からの文字列が左端に到着して、スクロールの1動作完了になります。
(事前の2秒静止と左スクロールを合わせて20秒で1動作になります)
※おまけ
marqueeの動作上、左端から消えた文字列を右端から見せるのはちょっと難しいため、
実はスクロールさせている文字列は以下のようにして実現しました。
「表示対象文字列」+「全角スペース3個」+「表示対象文字列」+「全角スペース3個」
20秒後の1動作完了時は上記で作成した文字列の丁度ど真ん中(50%)まで表示した状態になります。
(ただしスクロールの初期動作時と同一なため、見分けがつかない)