Class: Utils
negl 内部で使用する関数を保持する Utils クラスです。
Table of contents
Methods
- getDiagonalVertices
- getHrefObj
- getResolutionUniform
- getWorldPosition
- isIOS
- isSafari
- isTouchDevices
- lerp
- pointTo
- printMat
- toCamelCase
- tween
Methods
getDiagonalVertices
▸ getDiagonalVertices(hSeg, wSeg, getValue, defaultValue): number[]
対角線上に頂点を詰めた配列を返却します
Parameters
| Name | Type | Description |
|---|---|---|
hSeg | number | 高さのセグメント数 |
wSeg | number | 幅のセグメント数 |
getValue | (prevValue: number, currentIndex: number) => number | 頂点毎に返却する値 |
defaultValue | number | デフォルト値 |
Returns
number[]
頂点データの1次元配列を返却します。
getHrefObj
▸ getHrefObj(args?): undefined | { href: string ; target: "_self" | "_blank" }
{ href, target } を含むオブジェクトを返します。
data-click-* の値を split した配列からURLを取得する際に利用しています。
console.log(utils.getHrefObj('newTab,/detail.html'.split()));
// > { href="/detail.html", target="_blank" }
console.log(utils.getHrefObj('/detail.html'.split()));
// > { href="/detail.html", target="_self" }Parameters
| Name | Type | Default value |
|---|---|---|
args | string[] | [] |
Returns
undefined | { href: string ; target: "_self" | "_blank" }
getResolutionUniform
▸ getResolutionUniform(toRect, mediaRect?): Vector4
テクスチャのアスペクト値の算出
- テクスチャとHTML要素の大きさのアスペクト比からuResolutionを設定します。
Parameters
| Name | Type | Description |
|---|---|---|
toRect | Object | 要素の矩形を渡します。 |
toRect.height | number | - |
toRect.width | number | - |
mediaRect? | Object | 画像、または動画のオリジナルサイズを渡します。 |
mediaRect.height | number | - |
mediaRect.width | number | - |
Returns
Vector4
uResolution に設定する Vector4 オブジェクト x: DOMの横幅 y: DOMの縦幅 z: 横幅に掛ける縦横比 w: 縦幅に掛ける縦横比
getWorldPosition
▸ getWorldPosition(rect, viewport): Object
HTMLの座標をワールド座標に変換します。
Parameters
| Name | Type | Description |
|---|---|---|
rect | DOMRect | 対象のHTMLのDOMRect |
viewport | Viewport | Canvasのビューポート |
Returns
Object
| Name | Type |
|---|---|
x | number |
y | number |
isIOS
▸ isIOS(): boolean
iphone、ipadかどうかを判定します。
Returns
boolean
iphone、ipadの時 true。それ以外、false。
isSafari
▸ isSafari(): boolean
サファリブラウザかどうかを判定します。
Returns
boolean
サファリの時 true。それ以外、false。
isTouchDevices
▸ isTouchDevices(): boolean
タッチデバイスかどうかを判定します。
Returns
boolean
タッチデバイスの時、true。それ以外、false。
lerp
▸ lerp(a, b, n?, limit?): number
Lerp 関数
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
a | number | undefined | 始点 |
b | number | undefined | 終点 |
n | number | 0.3 | 線形補間要素(0 ~ 1) |
limit | number | 0.001 | limit まで値が近づくと終点の値を返す |
Returns
number
線形補間された値
pointTo
▸ pointTo(_mesh, originalDir, targetDir): void
メッシュの向きを指定の方向に回転します
Parameters
| Name | Type | Description |
|---|---|---|
_mesh | Object3D<Event> | 回転したいメッシュ |
originalDir | Vector3 | 元の向き |
targetDir | Vector3 | 向けたい向き |
Returns
void
printMat
▸ printMat(targetMatrix, col?, label?): void
1次元の配列をテーブル形式で出力します
Parameters
| Name | Type | Default value | Description |
|---|---|---|---|
targetMatrix | number[] | Matrix3 | Matrix4 | BufferAttribute | undefined | コンソールログに出力対象の配列を渡します。 |
col | number | 4 | 列数を指定します。 |
label | string | "" | テーブルのラベルを指定します。 |
Returns
void
toCamelCase
▸ toCamelCase(s): string
ケバブケースからキャメルケースへ文字列を変換します
Parameters
| Name | Type |
|---|---|
s | string |
Returns
string
tween
▸ tween(targets, options): void
gsap.to (opens in a new tab)の簡易版 ライセンスの問題と依存するライブラリを増やしたくなかったため、gsap.toの簡易版の関数を作成しました。
基本的には gsap.to と使い方は変わりませんが、ease や delay は使用できません。 また、gsap.to と異なり、utils.tween では gsap.to の overwrite オプションが常に true の状態の tween となります。
const progress = { value: 0, value2: 1 }
utils.tween(progress, {
value: 1, // progress.value は 1 秒かけて 0 -> 1 に遷移します。
value2: 0, // progress.value2 は 1 秒かけて 1 -> 0 に遷移します。
duration: 1,
onStart() { console.log('スタート時に実行されます。') },
onUpdate(progress) { console.log('アップデート時に実行されます。') },
onComplete() { console.log('終了時に実行されます。') },
})Parameters
| Name | Type |
|---|---|
targets | Object |
options | Object |
options.duration | number |
options.limit? | number |
options.onComplete? | (value?: unknown) => void |
options.onStart? | () => void |
options.onUpdate? | (progress: number) => void |
Returns
void