ラベル アニメーション の投稿を表示しています。 すべての投稿を表示
ラベル アニメーション の投稿を表示しています。 すべての投稿を表示

2025年1月16日木曜日

Theatre.jsのStudioで編集したアニメーションをOracle Databaseに保存する

Theatre.jsではStudio UIを使ってアニメーションを編集できます。編集したアニメーションはファイルに出力しますが、これをOracle Databaseに保存するように機能を追加します。また、データベースに保存したアニメーションをStudio UIにロードする機能も組み込んでみます。データベースに保存したアニメーションのデータを読み出して、プロダクションのアニメーションを表示します。

Theatre.jsのStudio UIはブラウザの全画面を使うアプリケーションです。これは、Oracle APEXの非モーダル・ダイアログのページに実装します。非モーダル・ダイアログのページは、Oracle APEXのナビゲーションが一切生成されないため、Studio UIと競合することがありません。しかし、追加のUIを載せることもできないため、アニメーションをデータベースに保存するUIは、別ウィンドウに実装します。Studio UIの操作は、BroadcastChannelでイベントを送信して実行します。BroadcastChannelを使って非モーダル・ダイアログで処理を行う実装については、以前の記事「非モーダル・ダイアログにあるレポートをダイアログを開いたウィンドウから制御する」で紹介しています。

作成したAPEXアプリケーションは以下のように動作します。Theatre.jsのプロジェクトは、Getting StartedのWith HTML/SVGを流用しています。

ボタンExportをクリックして、その時点でのStudio UIのアニメーションをOracle Databaseに保存しています。ボタンReloadをクリックして、プロダクションのアニメーションを表示するページをリロードして初期化し、その後にボタンImportをクリックして、Oracle Databaseに保存されたアニメーションを表示しています。


このAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-theatre-js.zip

アプリケーションが依存している表EBAJ_THEATREJS_PROJECTS(アニメーションを保存する表)およびパッケージEBAJ_ASP_THEATREJS_PKGを作成するDDLを、サポートするオブジェクトのインストール・スクリプトに含めているため、上記のファイルをインポートすると、アプリケーションとしては動作すると思います。

以下より作成したAPEXアプリケーションを紹介します。あくまで全画面を使うJavaScriptアプリをOracle Databaseと連携させる方法のサンプルなので、Theatre.jsとしての実用性はありません。プロジェクトについても、Getting Started With HTML/SVGの記述をファイルに直書きし、APEXのページに読み込んでいます。

最初にデータベースのオブジェクトを作成します。

表EBAJ_THEATREJS_PROJECTSを作成します。

パッケージ定義EBAJ_ASP_THEATREJS_PKGを作成します。

パッケージ本体を作成します。

パッケージに含まれているプロシージャは、Oracle APEXのAjaxコールバックとして呼び出します。

APEXのアプリケーションを作成します。名前はSample Theatre.jsとします。

ホーム・ページにプロダクションのアニメーションを表示するリージョンと、Theatre.jsのアニメーションをデータベースに保存するボタンEXPORTと、データベースからアニメーションを取り出すボタンIMPORTを作成します。また、ページをリロードするボタンRELOADも作成します。

JavaScriptのコードは別ファイルに記述します。ページ・プロパティのJavaScriptのファイルURLに以下を記述します。

[module]#APP_FILES#js/production-animation-tutorial#MIN#.js


ファイルproduction-animation-tutorial.jsの内容です。

ボタンEXPORT、RELOAD、IMPORTの処理はAPEXアクションとして実装しています。データベースからのアニメーションの取り出しは、AjaxコールバックRESTORE_PROJECT_STATEの呼び出しによって行います。

インポートしているファイルproject.jsでは、Theatre.jsのプロジェクトを記述しています。このファイルはStudio UIを実装しているJavaScriptファイルにも読み込みます。

AjaxコールバックRESTORE_PROJECT_STATEでは、以下のコードを実行します。
ebaj_asp_theatrejs_pkg.ajax_restore_project_state(
    p_project_id => :P1_PROJECT_ID
);

プロダクションのアニメーションを表示する領域として、静的コンテンツのリージョンTheatre.jsを作成します。

ソースのHTMLコードにアニメーションを適用するH1要素を記述します。

<h1 id="article-heading" style="text-align: center">Welcome</h1>

外観のテンプレート・オプションにより、リージョンの高さを320pxにしています。ボタンを配置しているリージョンをリージョンの上に移動し、リージョンの高さをもう少し高くしても良いかもしれません。


ページ・アイテムP1_PROJECT_IDにプロジェクトIDを設定します。ソースのタイプにアイテム、アイテムとしてG_PROJECT_IDを設定しています。つまり、このページ・アイテムの値はアプリケーション・アイテムG_PROJECT_IDに設定した値になります。

このようにしている理由は、ページ・アイテムの値はJavaScriptのコードから簡単に参照できるためです。Stuido UIのページでも同じプロジェクト名を参照しますが、ページが異なるためJavaScriptのコードからはP1_PROJECT_IDの値は参照できません。そのため、Studio UIを実装したページでは、ページ・アイテムとしてP2_PROJECT_IDを作成し、そのソースをアプリケーション・アイテムG_PROJECT_IDにしています。結果として、双方のページで、アプリケーション・アイテムG_PROJECT_IDの値をプロジェクト名として参照します。


共有コンポーネントのアプリケーション・アイテムとしてG_PROJECT_IDを作成します。


アプリケーション・アイテムへの値の設定は、アプリケーションの計算により行います。

頻度の計算ポイントとして新規インスタンス(新規セッション)開始時を選択し、計算タイプとして静的割り当て、計算にHTML Animation Tutorialを設定します。

Theatre.jsのプロジェクトがファイルproject.jsに直書きされていることや、アプリケーション・アイテムに設定しているプロジェクト名が決め打ちなので、このアプリケーション自体はTheatre.jsのGetting StartedのWith HTML/SVGで説明されている以上のことはできません。


ボタンをクリックして実行した処理のステータスを表示するページ・アイテムとしてP1_STATUSを作成します。


ボタンを配置する静的コンテンツのリージョンを作成します。外観のテンプレートにButtons Containerを選択します。APEXアクションのコンテキストを作成する際にJavaScriptからリージョンを選択できるよう、詳細の静的IDとしてCONTROLSを設定します。


ボタンについては、それぞれAPEXアクションを呼び出すように、動作のアクションとして動的アクションで定義を選択し、詳細のカスタム属性としてdata-action="EXPORT"、data-action="RELOAD"、data-action="IMPORT"を設定します。


プロダクションのアニメーションの表示と、それをコントロールするページの実装は以上で完了です。

Theatre.jsのStudio UIは、外観のページ・モードを非モーダル・ダイアログとしたページに実装します。

ページ・プロパティのJavaScriptのファイルURLとして以下を記述します。

[module]#APP_FILES#js/theatre-studio#MIN#.js


インポートするtheatre-studio.jsの内容です。


データベースからアニメーションを取り出すためにAjaxコールバックRESTORE_PROJECT_STATEを呼び出し、保存するためにSAVE_PROJECT_STATEを呼び出します。RESTORE_PROJECT_STATEは先のページに実装したものと同じ処理ですが、ページが異なるため、同じAjaxコールバックを作成する必要があります。

AjaxコールバックSAVE_PROJECT_STATEでは、以下のコードを実行します。
ebaj_asp_theatrejs_pkg.ajax_save_project_state(
    p_project_id => :P2_PROJECT_ID
    ,p_project_state => :P2_PROJECT_STATE
);

ページ・アイテムP2_PROJECT_IDは、先ほどのP1_PROJECT_IDと同様に、ソースのアイテムとしてG_PROJECT_IDを設定します。


ページ・アイテムP2_PROJECT_STATEには、アニメーションの定義であるJSONドキュメントを設定します。セッション・ステートのデータ型としてCLOBを選択します。また、この値はJavaScriptから設定するため、設定の保護された値をオフにします。


静的コンテンツのリージョンを作成し、ソースのHTMLコードにアニメーションの対象とするH1要素を記述します。

<h1 id="article-heading" style="text-align: center">Welcome</h1>


以上でStudio UIの実装も完了です。

Studio UIはナビゲーション・メニューから開きます。ページ作成ウィザードでナビゲーション・メニューの作成をオンにしていると、自動的にダイアログを開くメニュー・エントリが作成されます。


アプリケーションの背景を黒にするため、テーマ・ローラーを開き、テーマとしてVita - Darkを選択しています。


作成したアプリケーションの紹介は以上になります。

ブラウザとディスクでアニメーションに差異がある場合の、Studio UIの画面です。


Oracle APEXのアプリケーション作成の参考になれば幸いです。

完

2025年1月9日木曜日

MotionのQuick Startを3つの異なる実装方法でAPEXアプリケーションに組み込んでみる

State of JavaScriptによる2024年のサーベイを見ていたところ、Graphics & Animationsの分野でFramer Motionが3位になっていました。Framer MotionはReact向けのライブラリなのでOracle APEXでは使えませんが、Motion自体はVanilla JavaScriptの環境に組み込めるため、Oracle APEXにも組み込むことができます。

実際にMotionのJavaScriptのQuick startをOracle APEXに実装してみました。Motionのサイトの以下のページに記載されています。

今回は単にMotionのQuick startをAPEXアプリケーションのページに実装するだけではなく、以下の3種類の方法で実装します。
  1. 外部ファイルに素のJavaScriptでコーディングする。
  2. 外部ファイルにapex.actionsを使ったコーディングをする。
  3. 外部ファイルを使わず、主に動的アクションで実装する。
APEXアプリケーションに組み込んだMotionのQuick startは以下のように動作します。上記の3種類とも、同じ動作になるように実装しています。


上記のAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/sample-motion.zip

これより、それぞれの実装について簡単に紹介します。

素のJavaScriptによる実装


素のJavaScriptによる実装は、ページ番号1のホーム・ページに行っています。左ペインに現れるレンダリング・ビューに配置されているコンポーネントは概ねHTML要素に対応していて、APEXアプリケーションにJavaScriptのコードやCSSのクラス定義は含みません。

JavaScriptのコードは、ページ・プロパティのJavaScriptのファイルURLに記述している以下のファイルにまとめています。

[module,defer]#APP_FILES#js/quick-start-motion#MIN#.js


CSSのクラス定義は、ページ・プロパティのCSSのファイルURLに記述している以下のファイルにまとめています。

#APP_FILES#css/quick-start-motion#MIN#.css


画面に配置されるOracle APEXのコンポーネントは、コンポーネントの単位で静的IDとしてHTML要素のID属性を設定できます。そのため、コンポーネントに設定した静的IDをgetElementByIdの引数として渡すことにより、処理の対象とするHTML要素を取得できます。

以下の画面のように、ボタンに静的IDとしてANIMATE_ROTATEが設定されている場合、ボタン要素を取得するには以下を呼び出します。

document.getElementById("ANIMATE_ROTATE")


コンポーネントに含まれるHTML要素、例えばレポートに含まれるセルのようなHTML要素にアクセスする場合は、CSSクラスを設定してquerySelectorまたはquerySelectorAllを呼び出して、対象とするHTML要素を取り出します。CSSクラスといってもquerySelectorなどの引数に与えるための名前で、実際にCSSクラスを定義する必要はありません。CSSクラスを設定する場所が列CSSクラス、行CSSクラス、外観のCSSクラス、詳細のCSSクラスのどこであっても、HTML要素のclass属性に含まれるため、.クラス名 (ドットで始まるクラス名)をセレクタとして指定してコンポーネントの内部にあるHTML要素にアクセスできます。

アニメーションの開始および終了は、それぞれのボタンをクリックすることで処理を呼び出します。ボタンへのイベント・リスナーの登録は、ボタン要素を取得して、addEventListenerを呼び出してコールバック・ファンクションを設定しています。
document.getElementById('ANIMATE_ROTATE').addEventListener('click', (event) => {
    animateRotate = animate(
        ".box",
        { 
            rotate: [ 0, 360 ]
        },
        {
            duration: 1,
            repeat: 3
        }
    );
    animateRotate.then(() => {
        apex.debug.info('rotate is completed.');
    });
    apex.debug.info('rotate is started.');
});
このようなコーディングは開発者への負担が大きいため、Oracle APEXのようなローコード開発プラットフォームが使われるようになったと言えますが、生成AIによるコード生成を前提とすると、より一般的な形式のコードを出力させた方が効率が良さそうです。

Oracle APEXのアプリケーションについては、コンポーネントへ静的IDやCSSクラスを設定することが多くなります。


apex.actionsを使った実装



ページ番号2に、イベント・リスナーを登録する代わりに、Oracle APEXが提供しているapex.actionsを使った実装を行っています。ボタンやリンクをクリックしたときに、apex.actionsとして設定したアクションを呼び出しています。

動作は素のJavaScriptとまったく同じですが、apex.actionsを使って、コードを以下のように書き換えています。


いくつかの面でapex.actionsによる実装は、イベント・リスナーの設定よりも分かりやすい面があります。
  1. イベントの伝搬を意識しなくてよい。
  2. 呼び出される処理に名前が付いている。
  3. アクションを登録するコンテキストごとに名前空間が分かれる。
しかし、apex.actionsはボタンのクリックかリンクのクリックでの呼び出しに限定されるため、例えばmouseenterやmouseleaveといったイベントに対する処理を設定するには、イベント・リスナーを設定する必要があります。

apex.actionsを使う場合は、コンテキストの作成対象となるリージョンに静的IDを設定します。


処理を呼び出すボタンにカスタム属性data-actionを設定してアクション名を指定するか、リンクの場合はhref属性に[context-id]action-name?argumentsの形式でアクション名や引数を指定します。



動的アクションによる実装



ページ番号3に、Oracle APEXでの一般的な実装方法となる、動的アクションを使った実装を行なっています。

ひとつひとつのボタンに、JavaScriptコードを実行する動的アクションを設定しています。


値の設定、表示、非表示といった宣言的な設定だけで済む動的アクションであれば、処理内容を把握するのも難しくないと思います。しかし、JavaScriptコードがそれぞれの動的アクションに設定されている場合は、全体の処理を把握するのが難しくなる傾向があります。

動的アクションの間で共有する変数やファンクションは、ページ・プロパティのJavaScriptのファンクションおよびグローバル変数の宣言に記述する必要があります。
var animateRotate = null;
var animateThree = null;
var animateBasic = null;
var animateSpring = null;
var animateStagger = null;

var cube;

function rad(degrees) {
    return degrees * (Math.PI / 180)
};
Motionについては、ライブラリをJavaScriptのファイルURLに指定して読み込めます。ページ中からは、グローバル変数Motionより機能を呼び出せます。

https://cdn.jsdelivr.net/npm/motion@11.16.0/dist/motion.min.js

対してThreeJSはESモジュールとして読み込む必要があり、また、従属しているライブラリもあるため、importmapの設定が必要です。
<script type="importmap">
    {
        "imports": {
            "three": "https://cdn.jsdelivr.net/npm/three@0.172.0/build/three.module.min.js",
            "three/webgpu": "https://cdn.jsdelivr.net/npm/three@0.172.0/build/three.webgpu.min.js"
        }
    }
</script>

また、アニメーションについては、静的コンテンツのリージョンにインラインでコーディングする必要があります。


3種類の実装の紹介は以上になります。

実はOracle APEXはjQueryを使っているため、どのようなページでもjQueryがロードされ、呼び出すことができます。

https://docs.oracle.com/en/database/oracle/apex/24.1/aexjs/

The jQuery library is used by APEX and is always loaded on every page. It can be used by your code.

そのため、jQueryを使ったコーディングも可能です。今回の記事でjQueryを取り上げなかったのは、個人的にjQueryは使わないようにしているためで、jQueryを使うことに問題があるわけではありません。そのため、jQueryを使うという選択肢もあります。

今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。

完

2024年12月23日月曜日

KonvaのアニメーションをOracle APEXのアプリケーションに表示する

KonvaのアニメーションをOracle APEXのアプリケーションに表示してみます。KonvaのGitHubのページにあるQuick Lookの表示に取り組みます。

KonvaのライブラリはRequireJSを使って読み込みます。ライブラリの読み込みからアニメーションの描画を行うコードは別のファイルに記述し、Oracle APEXのページにはコードを一切埋め込まないようにします。

非常に簡単ですが、作成したAPEXのアプリケーションは以下のように動作します。


以下より簡単に実装について紹介します。

空のAPEXアプリケーションを作成します。名前はPlay Konvaとしました。

ホーム・ページにKonvaのアニメーションを表示する領域を作成します。

静的コンテンツのリージョンを作成し、ソースのHTMLコードとして以下を記述します。

<div id="container" style="width: 500px; height: 500px;"></div>


ページ・プロパティのJavaScriptのファイルURLに以下を記述します。

[require requirejs]#APP_FILES#app#MIN#.js


静的アプリケーション・ファイルとしてapp.js(およびミニファイしたapp.min.js)を作成します。内容として以下を記述します。ほとんどQuick Lookの内容そのままですが、HTML要素に表示するように変更しています。また、Stageのwidthとheightが受け取るのは数値だけなので、DIV要素のサイズを数値で渡すようにしています。


以上でアプリケーションは完成です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/play-konva.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

完

Pixi.jsのアニメーションをOracle APEXのアプリケーションに表示する

Pixi.jsのアニメーションをOracle APEXのアプリケーションに表示してみます。Pixi.jsのTutorialsにあるGetting startedの表示に取り組みます。

Pixi.jsのライブラリはESモジュールとして読み込みます。ライブラリの読み込みからアニメーションの描画を行うコードは別のファイルに記述し、Oracle APEXのページにはコードを一切埋め込まないようにします。

作成したAPEXのアプリケーションは以下のように動作します。Pixi.jsのGetting Startedにはありませんが、アニメーションの開始と終了をするボタンを付けています。


以下より簡単に実装について紹介します。ボタンの実装についてはLottieのアニメーションの記事と同じなので省略します。

空のAPEXアプリケーションを作成します。名前はPlay Pixi.jsとしました。

ホーム・ページにPixi.jsのアニメーションを表示する領域を作成します。

静的コンテンツのリージョンを作成し、ソースのHTMLコードとして以下を記述します。

<div id="container" style="width: 400px; height: 400px;"></div>

Getting startedのアニメーションを描画するDIV要素になります。余計な装飾を除くために、外観のテンプレートにBlank with Attributes (No Grid)を選択しています。


ページ・プロパティのJavaScriptのファイルURLに以下を記述します。

[module,defer]#APP_FILES#app#MIN#.js

HTMLヘッダーにimportmapを記述します。
<script type="importmap">
    {
        "imports": {
            "pixi.js": "https://cdn.jsdelivr.net/npm/pixi.js@8.6.6/+esm"
        }
    }
</script>

静的アプリケーション・ファイルとしてapp.js(およびミニファイしたapp.min.js)を作成します。内容として以下を記述します。ほとんどPixi.jsのGetting startedそのままですが、TickerPluginを明示的にextensionsに追加しているのと、アニメーションをHTML要素に表示するように変更しています。また、ボタンの処理も加えています。



以上でアプリケーションは完成です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/play-pixi-js.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

完

2024年12月19日木曜日

Mo.jsのアニメーションをOracle APEXのアプリケーションに表示する

Mo.jsのアニメーションをOracle APEXのアプリケーションに表示してみます。Mo.jsのTutorialsのGetting startedにあるbouncyCircleとspinnerの表示に取り組みます。

Mo.jsのライブラリはESモジュールとして読み込みます。ライブラリの読み込みからアニメーションの描画を行うコードは別のファイルに記述し、Oracle APEXのページにはコードを一切埋め込まないようにします。

作成したAPEXのアプリケーションは以下のように動作します。Mo.jsのプレイヤーなしのページとプレイヤーありのページを作成します。


以下より簡単に実装について紹介します。

空のAPEXアプリケーションを作成します。名前はPlay Mo.jsとしました。

ホーム・ページに、プレイヤーなしのbouncyCircleとspinnerのアニメーションを表示します。

静的コンテンツのリージョンを作成し、ソースのHTMLコードとして以下を記述します。bouncyCircleのアニメーションを描画するDIV要素になります。

<div id="bouncyCircle" class="w95p h300"></div>


同様に静的コンテンツのリージョンを作成します。ソースのHTMLコードとして以下を記述します。spinnerのアニメーションを描画するDIV要素になります。

<div id="spinner" class="w95p h300"></div>


ページ・プロパティのJavaScriptのファイルURLに以下を記述します。

[module]#APP_FILES#app-mojs#MIN#.js

HTMLヘッダーにimportmapを記述します。ES6モジュールを対象としたCDNサービスのesm.shを指しています。
<script type="importmap">
    {
        "imports": {
            "@mojs/core": "https://esm.sh/@mojs/core"
        }
    }
</script>

静的アプリケーション・ファイルとしてapp-mojs.js(およびミニファイしたapp-mojs.min.js)を作成します。内容として以下を記述します。ほとんどMo.jsのGetting startedそのままです。



プレイヤーなしのバージョンは以上で完成です。

空白ページをページ番号2として作成し、ホーム・ページと同じく静的コンテンツのリージョンbouncyCircleとspinnerを作成します。

ページ・プロパティのJavaScriptのファイルURLに以下を記述します。

[module]#APP_FILES#app-mojs-player#MIN#.js

CSSのファイルURLに以下を記述します。

#APP_FILES#app-mojs-player#MIN#.css

HTMLヘッダーに以下を記述します。
<script type="importmap">
    {
        "imports": {
            "@mojs/core": "https://esm.sh/@mojs/core",
            "@mojs/player": "https://esm.sh/@mojs/player"
        }
    }
</script>

静的アプリケーション・ファイルとしてapp-mojs-player.js(およびミニファイしたapp-mojs-player.min.js)を作成します。内容として以下を記述します。



Mo.jsのドキュメントからはプレイヤーの位置を指定する方法を見つけられず、コードから見つけています。MojsPlayerのインスタンスを作成する際に、parentとしてアニメーションを描画するDIV要素を指定し、classNameに指定したCSSクラス(上記のコードではmy-mojs-player)で表示位置を決めます。デフォルトでは、ウィンドウの最下部にプレイヤーが表示されます(parentの指定がdocument.bodyになる)。

プレイヤーの表示位置を定義するCSSクラスmy-mojs-playerは、app-mojs-player.cssで定義します。静的アプリケーション・ファイルとして作成します。



以上でアプリケーションは完成です。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/play-mojs.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

完

RiveのアニメーションをOracle APEXのアプリケーションに表示する

RiveのアニメーションをOracle APEXのアプリケーションに表示してみます。組み込みにはRiveのDocsのRuntimesのGetting startedのWeb (JS)に記載されている手順を元にします。

今回はRiveのライブラリをRequireJSを使って読み込むようにします。また、ライブラリの読み込みからアニメーションの描画を行うコードを別のファイルに記述し、Oracle APEXのページにはコードを一切埋め込まないようにします。

作成したAPEXアプリケーションは以下のように動作します。


以下より実装について簡単に紹介します。

空のAPEXアプリケーションを作成します。名前はPlay Riveとしました。

ホーム・ページに静的コンテンツのリージョンを作成し、ソースのHTMLコードにRiveのアニメーションを表示するキャンバス要素を記述します。

<canvas id="canvas" width="500" height="500"></canvas>


共有コンポーネントの静的アプリケーション・ファイルとして、play-rive.jsを作成します。


作成済みの静的アプリケーション・ファイルが一覧されます。ファイルの作成をクリックします。


ファイル名としてplay-rive.jsを入力します。作成をクリックします。


スクリプト・エディタが開きます。以下の内容を記述し、変更の保存をクリックします。参照はページ・プロパティのJavaScriptのファイルURLに記載するため、コピーしておきます。

RequireJSを使ってRiveのランタイム・ライブラリを読み込んだ後に、RiveのGetting startedに記載されているアニメーション表示を実行します。


静的アプリケーション・ファイルの一覧を開き、ファイルとしてplay-rive.jsとミニファイルされたplay-rive.min.jsが作成されていることを確認します。


ページ・プロパティのJavaScriptのファイルURLに、作成した静的アプリケーション・ファイルへの参照を記述します。RequireJSを使えるように参照の前に[require requirejs]を付加します。Oracle APEX 24.1に含まれている、RequireJSの2.3.7が自動的にロードされます。

[require requirejs]#APP_FILES#play-rive#MIN#.js


以上でアプリケーションは完成です。アプリケーションを実行すると、記事の先頭のようなアニメーションが表示されます。

JavaScriptのモジュール・システムのトレンドはESモジュールだと思いますが、Oracle APEXにはRequireJSがバンドルされていて、比較的簡単にRequireJSを呼び出すことができます。

今回作成したAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/play-rive.zip

Oracle APEXのアプリケーション作成の参考になれば幸いです。

完