💨

学習日記 20231010

2023/10/10に公開

20:20 2023/10/10

好まれるやり方ではないかもしれないが、
ChatGPTを使用して、
htmlのフォームから画像をアップロード
->モーダルウィンドウ(トリミングボタン付き)を表示させる。
->同時にアップロードした画像をプレビューとして表示させる。
->同時にその画像に対してcropperを適用する。
->トリミングを押下すると、ウィンドウが消える
->トリミングした画像をinput要素のfileにセット。
->同時にトリミングした画像をプレビュー画像として表示

というところまで実装することができた。
実装2日。

解答に対する疑問に対して、詳しく教えてくれるし、何より、
簡単な問題であれば、すぐ回答が返ってくる。
だからすぐ理解できる。
これはいいね。
これが無料で使える今の時代はすごいね。

学習記録ついでに残しておこう。

フォームからアップロードした画像を非同期で読み込むためにはFileReaderオブジェクトを使用する。

let reader = new FileReader();

javascriptにおいてファイルを扱うためにはFileオブジェクトを使用する。

const file = new File(array, filename, options);

フォームに新しいファイルデータを設定するためにはDataTransferオブジェクトを使用する。

const dt = new DataTransfer();

jqueryの書き出しは次の2つで始めることが一般的。
その違いについて。

$(document).ready(function () { ... });

documentオブジェクトが読み込まれて、DOMツリーが構築されたときに指定された関数を実行する。

$(function() { ... });

上の書き方のショートバージョン。動作は同じで、関数の実行タイミングも同じ。
こちらの方で書く人が多い。

今のままのコードだと挙動がおかしい。
まず最初にファイルをアップロードする。
->モーダルウィンドウが開いて、トリミング可能となる。この時点で元画像データはフォームのfilesにセットされている。
->トリミングを押すと、トリミングした画像が新しくフォームのfilesにセットされる。

キャンセルの挙動について
フォームから画像ファイルをアップする
->プレビュー画像ファイルとトリミング操作可能表示がされたモーダルウィンドウが開く。
 この時点で元画像ファイルがフォームのfilesにセットされる。
->範囲を選択して、トリミングボタンを押下するとトリミング画像データファイルがフォームのfilesにセットされる。
 同時にトリミング画像がフォームに表示される。
->画像を変更するために再度、フォームからアップロードする
->プレビュー画像ファイルとトリミング操作可能表示がされたモーダルウィンドウが開く。
 この時点で元画像ファイルがフォームのfilesにセットされる。
->キャンセルを押す。
->フォームのfilesにセットされているデータを消す。

キャンセルを押したら、前回のトリミングデータをセットさせるようにしたい。
なんかうまいこといかないものか。
22:52 2023/10/10

Discussion