API
Hook

negl機能一覧 / Exports / Hook

Class: Hook

フックの登録削除を行います。

hook 変数として negl からインポートして使用することができます。

取得方法

import { hook } from "negl";
// or
window.negl.hook

Since

1.0.0

Hierarchy

  • HookType

    Hook

Table of contents

Methods

Methods

off

off<T>(hook, callback, option?): void

onでフックに登録したコールバックを削除します。

// コールバック関数
function logTick(world) {
  console.log(world.tick);
}
 
// hook.RENDERのフックにコールバック(logTick)を登録
hook.on(hook.RENDER, logTick);
 
setTimeout(() => {
  // hook.RENDERのフックからコールバック(logTick)を削除
  hook.off(hook.RENDER, logTick);
}, 3000); // 3秒後
 
// 3秒間`tick`の値がログに出力される。

Type parameters

NameType
Textends keyof HookArgsMap

Parameters

NameType
hookT
callbackHookCallback<HookArgsMap[T]>
optionHookOptions

Returns

void


on

on<T>(hook, callback, option?): void

フックに紐づけたい(コールバック)関数の登録を行います。 フックに紐づけられた関数は特定の操作、またはイベントが発生したタイミングで実行されます。 また、フックを削除したい場合は off を使用してください。

hook

フックタイプの種類は以下の通りです。

フックタイプ発火タイミングコールバックの引数
BEFORE_PAGE_INITPage モジュールのデフォルト関数実行前Negl
MOUSEMOVEマウスが動いている間連続的に発火mouse
MOUSE_MESH_ENTERマウスがメッシュに入った時{ mesh (opens in a new tab), mouse, ob, meshUI }
MOUSE_MESH_HOVERメッシュにホバーしている時{ mesh (opens in a new tab), mouse, ob, meshUI }
MOUSE_MESH_LEAVEマウスがメッシュから出た時{ mesh (opens in a new tab), mouse, ob, meshUI }
MOUSE_MESH_CLICKマウスがメッシュをクリックした時{ mesh (opens in a new tab), mouse, ob, meshUI }
SCROLLスクロールしている時scroller
RENDER毎フレーム(requestAnimationFrame)world
RESIZE画面サイズが変わっている間連続的に発火viewport
RESIZE_DELAY画面サイズの更新が終了した時viewport
T_INITページトランジションの初期化時{}*空のオブジェクト
T_BEGINページトランジションの開始時state
T_NEXT_DOM_BEFORE次のページのDOMが挿入される前state
T_BOTH_DOM_EXIST次のページのDOMにアクセス可能な状態state
T_BOTH_OB_EXIST次のページのObオブジェクトがアクセス可能な状態state
T_ENDページトランジション終了時state
T_ERRORページトランジションでエラーが出た時state
ERRORnegl 内でエラーが発生した時Errorオブジェクト

callback

フックに登録したコールバック関数がイベント発火のタイミングで実行されます。

option

オプションはオブジェクトで渡します。以下のプロパティが設定可能です。

プロパティ初期値役割
typestringbaseトランジションのタイプを設定します。(T_*から始まるフックでのみ使用)
prioritynumber0同じ種類のフックに複数のコールバックが登録された場合に、priorityが大きい順番でフックが実行されます。
oncebooleanfalsetrueの場合、一度実行されたフックは自動的に削除されます。

使用例

import { hook } from "negl";
 
// マウスがメッシュに入った時に一回発火(
hook.on(hook.BEFORE_PAGE_INIT, (negl) => {
   console.log(negl); // neglをログに出力
})
// マウスがメッシュに入った時に一回発火(HTMLタグに`data-interactive`を要付与)
hook.on(hook.MOUSE_MESH_ENTER, ({ mouse }) => {
   console.log(mouse.getClipPos()); // マウス位置をクリップ座標でログに出力
})
 
// マウスがメッシュに入った時に一回発火(HTMLタグに`data-interactive`を要付与)
hook.on(hook.MOUSE_MESH_ENTER, ({ mesh }) => {
   mesh.scale.set(2,2,1); // マウスが重なった `mesh` をx,y軸方向に2倍に拡大
})
 
// マウスがメッシュから出た時に一回発火(HTMLタグに`data-interactive`を要付与)
hook.on(hook.MOUSE_MESH_LEAVE, ({ mesh }) => {
   mesh.scale.set(1,1,1); // マウスが出た `mesh` を元の大きさに戻す
});
 
// マウスをクリックした時に発火(HTMLタグに`data-interactive`を要付与)
hook.on(hook.MOUSE_MESH_CLICK, ({ mesh }) => {
   // クリックしたメッシュを右方向に 100 移動
   mesh.position.x += 100;
});
 
// 注意) MOUSE_MESH_* のフックはHTMLタグに`data-interactive`を付与してください。
// <img data-webgl="some-effect" data-tex-1="/example.jpg" data-interactive />
 
// スクロール中に発火
hook.on(hook.SCROLL, scroller => {
   const { delta } = scroller;
   console.log(delta.x, delta.y); // スクロールの変化量をログに出力
});
 
// 毎フレームの処理
hook.on(hook.RENDER, world => {
   // 注意)`requestAnimationFrame` のタイミングで連続的に実行されます。
   // 重い処理は書かないでください。
   console.log(world.tick); // tickのカウントをログに表示
});
 
// 画面リサイズ時に連続的に発火
hook.on(hook.RESIZE, viewport => {
   console.log(viewport.width); // canvasの横幅を取得
});
 
// 画面リサイズの終了時に発火
hook.on(hook.RESIZE_DELAY, viewport => {
   console.log(viewport.width); // canvasの横幅を取得
});

ページトランジション(T_*)に関するフックの使い方については transition を参照してください。

Type parameters

NameType
Textends keyof HookArgsMap

Parameters

NameType
hookT
callbackHookCallback<HookArgsMap[T]>
optionHookOptions

Returns

void


trigger

trigger<T>(hook, state, option?): Promise<void>

フックの実行を行います。各引数の詳細は on を参照してください。

Type parameters

NameType
Textends keyof HookArgsMap

Parameters

NameTypeDescription
hookTフックタイプ
stateHookArgsMap[T]フックに登録したコールバック関数の引数に渡る値
optionHookOptionsフックオプション

Returns

Promise<void>