LoginSignup
7
4

More than 5 years have passed since last update.

[phina.js] 要素をスクロールできるようにするアクセサリを作ってみた

Last updated at Posted at 2017-12-06

phina.jsのアドベントカレンダー2017の7日目です。
6日目の記事を読んで、自分でちゃんと実装してみたいと思いやってみました。

phina.jsでブラウザ風タッチスクロール - Qiita(6日目の記事)

クラス自体は実装してたら、結構長くなってしまったので、コードはgistにおいてあります。

phina.jsを読み込んだ後にこのURLを読み込むことで使うことができます。
https://rawgit.com/simiraaaa/8c0d6bf92cc4b0d4ddedac7ab7a7b72b/raw/039176929aec2838cc0fc7b303b8dac77512e51e/Scrollable.js

<script src="https://rawgit.com/simiraaaa/8c0d6bf92cc4b0d4ddedac7ab7a7b72b/raw/039176929aec2838cc0fc7b303b8dac77512e51e/Scrollable.js"></script>

Scrollableの使い方

スクロールできるようにするアクセサリのクラス名はScrollableです。
Accessoryを継承しています。
Element系のクラスにattachして使います。

最小サンプル

Scrollable().attachTo(this);
シーンのinit内でこの1行だけでシーンの要素全てがスクロールされるようになります。

[phina.js] 要素をスクロールできるようにするアクセサリ最小サンプル | Runstant

枠の外を描画しないようにする

enableClip()

枠の外を描画しないようにします。
enableClipサンプル
image.png

disableClip()

枠の外を描画するようにします。

friction, setFriction (摩擦)

最小0,最大1で摩擦を設定できます。

lock(), unlock()

lock()でスクロールできなくします。
unlock()でスクロールできるようになります。

最大スクロール位置の設定

minX, minY, maxX, maxY

  • minX = スクロールできるx軸の最小値
  • minY = スクロールできるy軸の最小値
  • maxX = スクロールできるx軸の最大値
  • maxY = スクロールできるy軸の最大値

setMinPosition(minX, minY)

minX, minYを設定できます

setMaxPosition(maxX, maxY)

maxX, maxYを設定できます

スクロールの方法

scrollTypeにスクロール方法を設定することができます。
デフォルトは'normal'です。

setScrollType(type)でも設定できます。

横スクロール固定

scrollType'x'をセットします

縦スクロール固定

scrollType'y'をセットします

縦横スクロール

scrollType'normal'をセットします。
スクロールの量が大きい方だけがスクロールします。

フリック(自由スクロール)

scrollType'flick'をセットします。
動かした方向に動きます。

よくある使い方

普通にありそうな感じのサンプル

よくある使い方サンプル | Runstant
image.png

ごちゃまぜサンプル

ごちゃまぜサンプル | Runstant

あとがき

実装してから気づいたことは、minとmaxのプラス・マイナスがイメージと逆になっているということです。
座標的には確かにyがマイナスになるほど上にスクロールしていますが、スクロールの最大値というとイメージ的には逆なので、setMaxPositionとsetMinPositionはプラスマイナス反転させたほうが良いのだろうかというのが悩みどころですね。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4