JavaScript関連のことを調べてみた

JavaScript関連のことを調べてみた
目次

【JavaScript】ABC374まとめ(A~D)

AtCoder Beginner Contest 374

https://atcoder.jp/contests/abc374

A~Dの4完(20分)でした。
1358perfでレートは783->856(+73)と大幅アップし入緑できました!
(入緑記事は後ほど公開します!)
今回はA~Dの解説を行います。

# A – Takahashi san 2
https://atcoder.jp/contests/abc374/tasks/abc374_a

入力は必ず4文字以上であることが保証されています。
なので後ろから3番目以降を取ってきて、`san`と一致するかを確認すれば良いです。

“`js
function Main(input) {
input = input.split(“\n”).map((line) => line.trim());
const S = input[0].split(“”);
let ans = “”;
for (let i = S.length – 3; i < S.length; i++) ans += S[i]; ans

元記事を表示

JavaScriptの配列メソッドを復習する

### JavaScriptの配列のメソッドを復習する

JavaScriptおよびTypeScriptをそれなりに触って1年以上になりますが、以下のようなコードを見て、一瞬「??」となったので、備忘録兼ねて解説していきます。

まずは、おなじみの書き方↓
“` JavaScript
const people = [
{ name: ‘Taro’, age: 20 },
{ name: ‘Jiro’, age: 25 },
{ name: ‘Ichiro’, age: 30 },
];
const names = people.map(person => person.name);
console.log(names);
// [“Taro”, “Jiro”, “Ichiro”]
“`

一瞬理解できなかった書き方↓
“` JavaScript
const people = [
{ name: ‘Taro’, age: 20 },
{ name: ‘Jiro’, age: 25 },
{ name: ‘Ichiro’, age: 30 },
];
con

元記事を表示

JavaScript周りの情報整理メモ

# JavaScript周りの情報整理メモ
## JQuery
javascriptのライブラリ(ライブラリは既存技術の機能を使って複数の処理にまとめたもの、フレームワークは利用することで新しい技術を使えるようになるイメージ)

## Next.js
ReactベースのフルスタックWebアプリケーションフレームワーク。Reactはクライアントサイドのみをサポートするが、Next.jsはサーバーサイドもサポートする。

## Nust.js
ナクスト・ジェイエスと読む。Vue.jsがベースになっているJavaScriptフレームワーク。Vue.jsをより使いやすくする機能を持っている。Vue.jsで記述して、サーバーサイドレンダリングができる。ルーティングもしてくれる。

## Vue.js
MVCモデルのView層を扱うフレームワーク。コンポーネント構築のためのフレームワークで、Vueで出来ることはReactに似ています。

## Vanilla JS
何のライブラリもフレームワークも使わないでJSを書くことをいう。語源はアイスクリームの標準的な風味であるバニラ味からきている。quer

元記事を表示

Three-VRMで顔パーツの表情パラメータを直接指定する

# 概要

例えば口だけを笑顔にしたいとき、わざわざ表情登録をせずにパラメータ値を直接指定する方法です。VRoidStudioの顔パーツごとの表情パラメータの指定みたいな感じです。

私の別記事([Three-VRMで組み合わせて表情を登録する(Custom Expression)](https://qiita.com/nobrin/items/9085fed1ef5b8b508290))といった方法が一般的な方法だと思いますが、強制的に特定の顔パーツ(口だけ)の表情パラメータを指定する方法です。

# 動作確認環境

– VRoidStudio 1.29. 1 — VRMファイルのエクスポート
– Three-VRM 3.1.2
– Firefox 131(Windows 10 22H2)

# 実装

最終的に、FaceグループにバインドされているSkinnedMeshオブジェクトの`morphTargetInfluences`の対応するインデックスの値にウェイトを格納し、`render()`されると反映されるようです。

これを実現するには、`requestAnimationF

元記事を表示

スクリプト ソースをフェッチできません。

# はじめに
たまに出ることがありますが、珍しいエラーメッセージです。
このエラーが出るのは、excuteScript()をbackground.jsで出力したときにconsole.js側のコンソールに表示されています。いざ、実行しようとしたが、その時にexcuteScript()が取得できないようです。background.js側では、excuteScript()を生成しているのですが。

原因はいまのところ、不明です。
特別なことは行っていません。この時のアクションは、サイトページで、ctrlKey+clickを行ったときです。
ctrlKey+clickを行ったときは、ポップアップ画面をページのbody要素にアペンドしています。ポップアップ画面には、各種ボタンを表示しています。この時、同時に、background.jsへ”clickSet”メッセージを送信しています。background.jsは、executeScript()で、ctrlKey+clickのイベントリスナーを登録しています。
# テストサイト
[https://tecoyan-net.jimdofree.com/

元記事を表示

恐怖ホラーゲーム。球の中に閉じ込められてしまうゲーム。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/73cb1007-9f22-af4c-6934-c77e32cfe296.png)

コードをメモ帳などのテキストエディタに貼り付け、ファイル名を「index.html」として保存します。その後、保存したファイルをブラウザで開けば、コードが実行されます。

### 恐怖ホラーゲーム。球の中に閉じ込められてしまうゲーム。
カーソルキーで操作です。

参考文献。

https://qiita.com/muratatetsutaka84/items/3a9356aa5b4d1d958352

“`html





360度パノラマビュー</</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>初心者</div> <div class='tag-cloud-link'>ポエム</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/muratatetsutaka84/items/02df6ec9959497e48557'>元記事を表示</a></div> <h3 id="outline__0_0_7"><a href='https://qiita.com/RYA234/items/022e9aad0448498332a9'>JavaScriptで蟻本 動的計画法 分割数</a></h3> <blockquote><p># 概要<br /> アルゴリズムの学習記録を投稿します。<br /> 今回は蟻本p66の動的計画法の分割数についてです。</p> <p># 問題<br /> p66<br /> “`<br /> n個の互いに区別できない品物を、m個以下に分割する方法の総数を求め、Mで割った余りを答えなさい。</p> <p>入力<br /> n = 4<br /> m = 3<br /> M = 10000</p> <p>出力<br /> 4<br /> “`</p> <p># コード部分<br /> “`javascript<br /> /**<br /> *  分割数を計算する<br /> *<br /> * @param {Number} n – 品物の数<br /> * @param {Array} m – 分割する数<br /> * @param {Number} M – 割った数<br /> * @return {Number} -価値の総和<br /> */<br /> const calDivisionNumber = (n,m,M) =>{<br /> let dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));<br /> // let dp = new Array(number1 + 1).fill(0).map(() => new Array(number2 </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>アルゴリズム</div> <div class='tag-cloud-link'>PythonTutor</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/RYA234/items/022e9aad0448498332a9'>元記事を表示</a></div> <h3 id="outline__0_0_8"><a href='https://qiita.com/muratatetsutaka84/items/ed152941d59046df7c0d'>画像の拡散と逆拡散アニメーション。「このプログラム、まるで俺みたいだな」</a></h3> <blockquote> <p>![スクリーンショット 2024-10-06 062020.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/3d9a5e1b-e51c-bfec-95e7-8a0d319b00cb.png)</p> <p>![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/c779237e-6c98-a1d2-2708-6b92f1b94e4f.png)</p> <p>#### タイトル: 「拡散する未来」<br /> 東京の午後、浅川翔太は薄暗い自室のモニターをじっと見つめていた。彼はプログラマーとして数々の案件をこなしてきたが、最近手掛けているプロジェクトは少し変わっていた。新たなアルゴリズムを使い、画像を拡散させ、元の状態に復元するというものだ。彼はこのアルゴリズムに自分でも驚くほどの興味を抱いていた。拡散と逆拡散――それはただの数学的な処理ではなく、翔太にとっては何か人生そのものを象徴しているように感じられた。 </p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>初心者</div> <div class='tag-cloud-link'>ポエム</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/muratatetsutaka84/items/ed152941d59046df7c0d'>元記事を表示</a></div> <h3 id="outline__0_0_9"><a href='https://qiita.com/muratatetsutaka84/items/7241fcfa2e8e5f8d8a77'>Web Audio APIを使って、音源が大きな3次元の楕円軌道上を動いた場合の、音の変化をシミュレーション。</a></h3> <blockquote><p> ![スクリーンショット 2024-10-06 045912.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/8e67989d-8a62-a48f-44db-27ed3c1891cb.png)</p> <p>![スクリーンショット 2024-10-06 050145.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846020/9cc0d85c-de84-71ae-78a2-517f82861c75.png)</p> <p>コードをメモ帳などのテキストエディタに貼り付け、ファイル名を「index.html」として保存します。その後、保存したファイルをブラウザで開けば、コードが実行されます。</p> <p>### 音源が大きな3次元の楕円軌道上を動き、その時の音の変化をシミュレーションしてます。</p> <p>Web Audio APIを使って、移動する音源をシミュレート</p> <p>“`html<br /> <!DOCTYPE html><br /> <html lang="ja"</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>初心者</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/muratatetsutaka84/items/7241fcfa2e8e5f8d8a77'>元記事を表示</a></div> <h3 id="outline__0_0_10"><a href='https://qiita.com/oizumi-yuta/items/c68e971b29bafab9af33'>【JavaScript】リモートにある .ttf ファイルを読み込んで jsPDF に日本語フォントを適用する</a></h3> <blockquote><p># 概要</p> <p> jsPDF を使って日本語で PDF ファイルを生成したかったが、日本語対応はしていないため、.ttf ファイルを使用する。</p> <p>https://github.com/parallax/jsPDF</p> <p>> PDF の 14 の標準フォントは、ASCII コード ページに限定されています。UTF-8 を使用する場合は、必要なグリフを提供するカスタム フォントを統合する必要があります。jsPDF は .ttf ファイルをサポートしています。</p> <p>.ttf ファイルは Google Fonts からダウンロードする。今回使用する `Noto Serif Japanese` の .ttf ファイルは以下からダウンロードできる(Download all(1)をクリックする)。</p> <p> https://fonts.google.com/selection?subset=japanese&script=Hira</p> <p> README にある通り以下に .ttf ファイルをアップロードする。</p> <p>https://rawgit.com/MrRio/jsPDF/master/fontconverter/fo</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>jspdf</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/oizumi-yuta/items/c68e971b29bafab9af33'>元記事を表示</a></div> <h3 id="outline__0_0_11"><a href='https://qiita.com/mogamoga1337/items/43a775444cee31fd2e08'>画像から琵琶湖の面積をシンプルに求める</a></h3> <blockquote><p> ## きっかけ</p> <p>https://qiita.com/shinichi1729/items/bb4ced8625ca8b6defb4</p> <p>## 方法</p> <p>画像のピクセル数を数えるだけの簡単なお仕事です。<br /> 1辺の長さは滋賀県の南北長(101.4km)から導きます。<br /> (滋賀県の面積から比を使って求めるのは個人的になんか違うなと思った。その滋賀県の面積はどうやって求めたんだ?と思うから。)</p> <p>ちなみに期待する琵琶湖の面積は670.4km²です。</p> <p>また画像はこれを利用します。</p> <p>https://www.ac-illust.com/main/detail.php?id=1190333</p> <p>## コード</p> <p>“`js<br /> import { createCanvas, loadImage } from “canvas”;</p> <p>loadImage(“./sigaken.png”).then(image => {<br /> const canvas = createCanvas(image.width, image.height);<br /> const context = canvas.getContext(“2</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>数学</div> <div class='tag-cloud-link'>琵琶湖</div> <div class='tag-cloud-link'>面積</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/mogamoga1337/items/43a775444cee31fd2e08'>元記事を表示</a></div> <h3 id="outline__0_0_12"><a href='https://qiita.com/sonneko/items/9e596fa965d04a84a67a'>これまでに勉強したWeb系技術。(ポエム)</a></h3> <blockquote><p>## これまでに勉強したWeb技術</p> <p>## はじめに<br /> Web開発超初心者が、ちょっとだけわかってきたので、<br /> どんなふうに、勉強したかを紹介するポエム。</p> <p>ほとんどの方には、メリット0の記事となると思います。</p> <p>## HTML・CSS・JS</p> <p>htmlだけのシンプルなサイトをいくつか作ってきたので、<br /> 「調べたらどんなこともできる状態」<br /> になってきた。</p> <p>CSSのプロパティとかJSのAPIやらは無限にあるので、覚えなくていいと思う。</p> <p>アニメーションを作るのが楽しい。</p> <p>## GAS(Google Apps Script)<br /> バックエンドの処理を書きたいなーと思ってたら、<br /> GASで簡単にAPIを作る。</p> <p>クロスドメイン制約がめんどくさかったけど、<br /> 簡単に、バックエンドの導入だ。</p> <p>ついでに、HTTPについてもお勉強。JSON便利やなー</p> <p>でもなんでサーバーでJSが動くんだ?</p> <p>## Node.jsの発見</p> <p>Node.js。<br /> これまで、ブラウザでしか動かないはずのJavaScriptがサーバー側で動く。</p> <p>普通にすごい!</p> <p>でも何がしたかった?</p> <p>## TypeScript</p> <p>先延ばしにした</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>Node.js</div> <div class='tag-cloud-link'>Web</div> <div class='tag-cloud-link'>ポエム</div> <div class='tag-cloud-link'>WebAssembly</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/sonneko/items/9e596fa965d04a84a67a'>元記事を表示</a></div> <h3 id="outline__0_0_13"><a href='https://qiita.com/sanskruthiya/items/dcd26d86ba8d664e4d57'>MapLibre GL JSのGlobe Projectionを試す</a></h3> <blockquote><p># 概要</p> <p>ウェブ地図描画ライブラリのMapLibre GL JSでは、v5のPreバージョンでGlobe(ウェブ地図を地球儀の形で投影する手法)が実装されました。<br /> この記事執筆時点ではこのプレ版での試行結果と実用例を示します。なお今後、正式バージョンのリリースにて仕様が変更される可能性はありますのでご留意ください。</p> <p># 作成例<br /> 地球儀のようにマップを投影して自由に動かせます。<br /> ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/122865/b9e7c07f-08d1-64cb-bc04-b345e26e6436.png)</p> <p>使用例として、自分の渡航履歴を写真と一緒に巡るストーリーマップを作りました。<br /> ポップアップをクリックまたはタップすることで、地球儀をグルグル巡ります。<br /> 平面の地図で表現するよりも動きがよりダイナミックになります。</p> <p>下記アプリケーションへの外部リンク([リンク](https://kashiwa.co-place.com/cmap/mygj/))<br /> ![image.png</p></blockquote> </blockquote> <aside class='widget widget-post'> <div class='tag-cloud-link'>JavaScript</div> <div class='tag-cloud-link'>GIS</div> <div class='tag-cloud-link'>MapLibre</div> </aside> <div><a style='width:100%;' class='btn__link' href='https://qiita.com/sanskruthiya/items/dcd26d86ba8d664e4d57'>元記事を表示</a></div> <h3 id="outline__0_0_14"><a href='https://qiita.com/XYZXYZXYZ/items/14b74b356c42af834dc7'>javascriptを使ったjson学習</a></h3> <blockquote> <h1 id="outline__1">javascriptを使ったJSON学習</h1> <p></p> <h2 id="outline__1_1">以下のサイトのデータを取得してみよう!!</h2> <p>https://geoapi.heartrails.com/api.html</p> <h3 id="outline__1_1_1">※自動でhtmlに表示する部分はまだ作成中!!</h3> <p>“`html<br /> <DOCTYPE html><br /> <head><br /> <title>都道府県の市町村取得 API


市町村情報取得を取得できます


元記事を表示

AccessでWebビューアプリ

# はじめに
「Accessでアプリを作る」という縛りがある中、古臭くないUIを求められたので、
AccessをベースとしたWebビューアプリに仕立ててみました。

サンプルではhtmlファイルを外出しにしていますが、テキストデータとしてAccess側に埋め込むことも出来ます。
メンテナンス性が悪くなりますが…

使用する「Microsoft Web Browser」はベースがIEです。
その為、cssやjavascriptはIEに対応した書き方にする必要があります。

# 手順(サンプル)
1\. Accessファイル(サンプルではファイル名:AccessHtml.accdb)を作成します

2\. フォーム(サンプルではフォーム名:frmBrowser)を追加します

3\. フォームに「Microsoft Web Browser」(サンプルではオブジェクト名:webBrowser)を追加します

4\. フォームにボタン(サンプルではオブジェクト名:btnToHtml)を追加します

5\. 参照設定に「Microsoft HTML Object Library」を追加します

元記事を表示

ボタン処理の書き方

# やりたいこと
ボタンを設置して一定時間たつとボタンが使えなくなる。困った。だから書くことにした。
# ボタンの処理
[discord.jsのガイド](https://discordjs.guide/message-components/interactions.html#responding-to-component-interactions)(コンポーネントの相互作用への応答)によると
“`javascript:button.js
const { SlashCommandBuilder, ButtonBuilder, ButtonStyle, ActionRowBuilder } = require(‘discord.js’);

module.exports = {
data: new SlashCommandBuilder()
.setName(‘button’)
.setDescription(‘ボタンを送信します’),
async execute(interaction) {
const button1 =

元記事を表示

Three-VRMで組み合わせて表情を登録する(Custom Expression)

# 概要

Three-VRMでプリセットの表情ではなく、パーツごとに組み合わせた表情(眉毛、目、口などでそれぞれ異なった表情にする)を反映させてみます。プリセットの表情は特に設定なしに使うことができますが、パーツごとに変える場合はCustom Expressionとしての登録が必要となります。

Unityなどでブレンドシェイプを作成することで実現する方法もあるみたいですが(試してませんが)、ここでは、JavaScriptの実行時にプログラム的に設定し使用します。

# 動作確認

– VRoidStudio 1.29. 1 — VRMファイルのエクスポート
– Three-VRM 3.1.2
– Firefox 131

# 実装
## プリセットの使用

Three-VRMでブラウザ上でVRMを非常に簡単に扱うことができますが、`expressionManager`経由で表情を反映させることができます。以降のコードでは、変数`vrm`は`VRM`オブジェクトとします。VRMファイルの読み込みはThree-VRMのサンプルスクリプト等を参照してください。ここで扱うコードはVRMオ

元記事を表示

疑似実装で理解するJest/Vitest spyOn

# 発端:なぜ`spyOn(obj.fn)`ではなく`spyOn(obj, ‘fn’)`なのか
Jest/Vitestで関数の呼び出し履歴をテストしたいときには`spyOn`関数が用いられる。オブジェクト`obj`に含まれる関数`fn`をテストする際には、`vi.spyOn(obj, ‘fn’)`という使い方となり、`vi.spyOn(obj.fn)`というインターフェースにはなっていない:
“`js
const spy = vi.spyOn(obj, ‘fn’) // vi.spyOn(obj.fn)じゃだめなのか??

/* obj.fnを呼び出すことが期待される処理 */

expect(spy).toHaveBeenCalledWith(‘hoge’)
“`
この疑問を解消しつつ`spyOn`がどのように動作しているかを理解するため、簡易版`spyOn`を実装してみた。

# `spyOn`の仕組み
`spyOn`は大きく分けて以下2つのことをしている:
1. 渡された関数`fn`を、呼び出し履歴(など)を記憶するための層で包む
1. 包んだ関数で元の関数を”すり替える”

元記事を表示

JavaScriptの復習⑤

# はじめに
今回の記事は、ページスクロールと複数の条件を組み合わせたアニメーションについて復習します。

# ページのスクロール量とは?
JavaScriptのページスクロール量とは、**ユーザーがページをどれだけスクロールしたかを取得・操作することです**。スクロール量を知ることで、動的なレイアウト変更や、特定の要素にスクロールさせるといったインタラクションを実装できます。

# 全体のコード一覧

元記事を表示

WebAssembly用アセンブラを作ってみた

https://github.com/ikiuo/wasmgen

伝統的な形式で WebAssembly を記述したい方向けです。

# サンプル

“`asm:test.s
;# test.s

;# i32cpy(x) = x
.export i32cpy
i32cpy: .code i32
x: .param i32
local.get x
end

;# i32add(x, y) = x + y
.export i32add
i32add: .code i32
x: .param i32
y: .param i32
local.get x

元記事を表示

OTHERカテゴリの最新記事