JavaScript の質問用スレッド vol.125

■ このスレッドは過去ログ倉庫に格納されています
2022/08/07(日) 15:57:40.26ID:TS5TGpUB0
!extend:checked:vvvvvv:1000:512
JavaScript を自ら学ぶ人のための質問スレッドです。
>>2-5のテンプレを読んだ上で質問してください。次スレは>>950>>2の「次スレの立て方」を元に立ててください

■質問を書く上で
(1) 煽り、コード制作依頼等、人を不快にさせる投稿はご遠慮下さい。公序良俗を守った応対を心がけてください。
(2) 他の人に迷惑をかけるスクリプトの質問はご遠慮ください。
  (ブラクラ、[戻る], [閉じる], [クリック] の妨害、画面占有など)
(3) 質問者及び議論を行う人はメール欄を空欄にし、名前にレス番を入れることを強く推奨します。回答者はなりすましを判断できませんので、なりすましが現れても自己責任となります。
(4) 常に自発的に調べる心構えを持ってください。
  具体的には「自分で調べてから質問する」「回答をもらってわからない単語があればGoogle検索してみる」など。
  わからない内容を代わりに調べてくれる回答者をお望みの方は余所で質問してください。
(5) 出来るだけ一般的な用語を使用してください。脳内オレオレ用語は混乱の元です。
(6) 出来るだけサンプルコードを掲示してください。言葉による説明は行き違いが生まれる場合があります。
  ※必ず「問題の事象が再現されること」を確認してください。
   必要な部分だけ切り出したつもりで現象が再現できていなかったケアレスミスがしばしば見られます。
(7) サンプルコードに HTML が含まれる場合は http://validator.w3.org/ で [Check] してみてください。
(8) 質問を具体的かつ詳細に書くと回答を得られやすいです。>>2の質問テンプレートを活用してみてください。
(9) ライブラリ関連の質問は禁止です。関連スレにあるライブラリ質問スレで質問して下さい。
(10) 時にはあなたが望む「答え」だけでなく、「意見」などが寄せられる場合もあります。

■前スレ
JavaScript の質問用スレッド vol.124
https://mevius.5ch.net/test/read.cgi/tech/1636525464/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:: EXT was configured
2022/12/13(火) 18:39:15.95ID:pwiPw3z60
>>407
プロパティを参照する時、「対象オブジェクトの直属のプロパティ」だけでなく、[[Prptotype]] と呼ばれる内部プロパティ内にあるプロパティも検索対象となる仕組みを「プロトタイプチェーン」という
2022/12/13(火) 19:12:20.42ID:cf0t5w5pH
>>408
プロパティを参照する時、対象オブジェクトの直属にプロパティへの参照がない場合、[[Prptotype]] と呼ばれる内部プロパティ内にあるプロパティへの参照を走査する仕組みを「プロトタイプチェーン」という
なお[[Prototype]]はnewで生成される親のprototypeへの参照が格納されるが、動的に[[Prototype]]をセットすることもできる

でどうでしょう?
2022/12/13(火) 20:14:40.67ID:pwiPw3z60
>>409
プロトタイプに「親」という概念はない
クラスベース言語の考えが混ざってる気がする
2022/12/13(火) 20:36:49.94ID:cf0t5w5pH
>>410
えええええ?そうなんですか?
継承あるのに親がいない???
2022/12/13(火) 22:34:12.05ID:cf0t5w5pH
>>410
僕は理解が浅いのでもっと学習しないと。
JSはprptotypeの理解が深まると幅が広がりそうですね
僕ももっと勉強進めないと
2022/12/14(水) 00:03:47.61ID:+gEopm0Q0
>>411-412
プロトタイプベースとクラスベースの違いを理解することから始めよう
https://www.google.com/search?q=%E3%83%97%E3%83%AD%E3%83%88%E3%82%BF%E3%82%A4%E3%83%97%E3%83%99%E3%83%BC%E3%82%B9+%E3%82%AF%E3%83%A9%E3%82%B9%E3%83%99%E3%83%BC%E3%82%B9&ie=UTF-8

親クラス、子クラス、継承は、クラスベース由来の用語
多くのサイトでクラスベースに慣れた人用に使われている用語だが、クラスベースのつもりで受け取ると誤った機能理解に繋がる

クラスベースはインスタンス生成時に親クラスを複製するが、プロトタイプベースは複製しない
プロトタイプベースはプロトタイプに手を加えると「全てのプロトタイプを元にしたオブジェクト」に影響する

「継承」や「クラス」という用語を使うのは問題ないが、プロトタイプでどのように継承やクラスを実装しているのかは理解する必要がある
2022/12/14(水) 00:19:25.91ID:Dbkp4Og+0
プロトタイプ最強伝説!
2022/12/14(水) 07:32:29.92ID:r+idjll+H
protptypeを使い、new演算子でインスタンスを継承でき、
さらにプロトタイプチェーンで始祖子孫を関連付けられるのに
親子関係という概念はJSにはないんですねー
2022/12/14(水) 07:55:29.99ID:r+idjll+H
ちょっと調べてみたけど、JSに親子関係は存在しない、的な記事はない
MDNには親子表現はないけれど、JSの継承で親子表現してる記事は多数ある
親子関係はクラスの拡張、実装、インスタンス生成でも使われるけど
親子関係自体を定義した言語なんて存在しない、あくまで機能の表現方法
であるにもかかわらず、プロトタイプ言語に親子関係が存在しないというのは
どこかにそういう記述があると思うのですが、参照場所を教えていただけませんか?
2022/12/14(水) 12:33:00.70ID:3zhhSsQg0
プロトタイプベースでは、親ではなく雛形という概念を用いる(それこそがプロトタイプ)
JavaScriptはプロトタイプベースのオブジェクト指向言語の代表格だが
その JavaScriptにも、ES2015(ES6) でクラスベース構文が導入されたので、
使い手の側としては、思想・概念・用語が入り乱れる事になったのかも知れません
2022/12/14(水) 13:15:16.28ID:U8xYt1Js0
あらためてMDNを概覧しましたが
417さんの力説されているとおりかもしれませんね
今後はご指摘の件、頭にいれながら勉強します
ながながとありがとうございます!今後ともよろしくです
2022/12/14(水) 14:22:13.24ID:dv/CWk9JH
個人的にクラス≒雛形って考えだからプロトタイプはわかるけどクラスベースがわからなかった

「雛形クローンして用意してあるの変えるだけだろ?」って
2022/12/15(木) 01:00:33.27ID:z3rBZpFn0
>>418
よくぞ言った、プロトタイプ使徒よ!
2022/12/16(金) 14:16:16.56ID:wrcGLpVa0
みんなはフレームワーク使ってる?
それともJS直接使ってる?
2022/12/16(金) 14:22:39.89ID:C3ZoQFlkM
お前から発表しろよ
アンケートだから職種、年俸、年齢、結婚歴は必須な
2022/12/17(土) 12:10:49.73ID:kI1nA3xa0
>>422
職種:プロトタイプ
年俸:プロトタイプ
年齢:プロトタイプ
結婚歴:プロトタイプ
2022/12/17(土) 13:15:46.84ID:OiGNBIp60
質問させてください

<style>
#d1,#d2{ color:blue}
</style>

<div id="d1"></div>
<div id="d2"></div>

<script>
</script>

JSで、<style>内の#d1,#d2セレクタの設定を編集したいのですが
特定のセレクタ部分だけを取得して変更ってできますか?
2022/12/17(土) 13:44:50.71ID:ycEukJwD0
>>424
https://developer.mozilla.org/ja/docs/Web/API/StyleSheetList
2022/12/17(土) 13:49:34.17ID:ycEukJwD0
>>424
変更はこっちだった
https://developer.mozilla.org/en-US/docs/Web/API/StyleSheetList
2022/12/17(土) 13:53:37.75ID:ycEukJwD0
>>424
訂正
https://developer.mozilla.org/ja/docs/Web/API/CSSStyleSheet
2022/12/17(土) 20:57:11.28ID:/rkC0QGzH
>>426
ありがとうございます。JSの皆様は本当に神様。
取り急ぎお礼申し上げます。ありがとうございます。
できれば明日時間をとって拝読させていただきます。
2022/12/17(土) 22:30:28.67ID:8Q1kFIoR0
if(A1[1] == A1[3]){
A0C = (A0[3]+A0[1])/2;
A1C = (A1[3]+A1[1])/2;
Ty = A1C - A0C;
X1[0].translate(0,Ty);
} else {
dofn3();
}

このif文ですが、A1[1]とA1[3]の誤差がプラスマイナス0.5までならtrueというふうに変えたいんですけど、どう書き換えれば良いでしょうか?
今のままだとA1[1]とA1[3]ともに小数点以下10桁くらいあって条件が厳し過ぎるんですよね
手違いでちょっとずれて作ってしまうこともあるので、その場合はtrueにしたいのです
2022/12/17(土) 22:40:09.17ID:on9KAdJq0
A1[1]とA1[3]の差が絶対値で0.5までって書けばいいんじゃないの?
2022/12/17(土) 22:44:13.88ID:8Q1kFIoR0
A1[1]==A1[3]は、四角形の左上のY座標A1[1]と右下のY座標A1[3]が同じだから、直線という意味です
でもこの2点を上下0.5くらい余裕を持たせたいんです
間違って微妙に斜めに線を引いてしまうこともあるので
2022/12/17(土) 22:45:31.22ID:8Q1kFIoR0
>>430
そうか
簡単でしたね w
ありがとうございます
2022/12/17(土) 22:45:36.51ID:t7AYft2Wr
>>429
まず自分で試行錯誤してみたら?
やりたいことが日本語に出来てるなら難しいことではないと思うよ
君は何でも最初から人に聞いて済ませようとしてるように見える
2022/12/17(土) 22:47:25.94ID:t4TbQFP40
このスレは、回答者の腕試しの意味もあるから
2022/12/17(土) 23:01:46.75ID:nEwVWz8Q0
正直このレベルの質問に答える必要が無いと思うが・・・
範囲でif文を書く事とかすら考えつかないレベルでこの先やっていける訳無いやんw
2022/12/17(土) 23:10:51.36ID:2CNUWbJ80
>>435
こういうちょっとしたきっかけで他の思い付きができるようになることもあるしね
2022/12/18(日) 12:44:32.64ID:uPN+O46jH
>>427
様、ありがとうございました。
CSSのスタイル設定プロパティをJSで編集できました。
CSSRulesは配列で返ってきますが
cssRules['div'].color='blue'
のように、プロパティ名で編集する方法はありませんでしょうか?
2022/12/18(日) 14:19:43.57ID:6JZ/0f38r
jQuery使えばできます
2022/12/19(月) 12:00:53.42ID:KEwe+Jaf0
>>437
俺は「プロパティ名で編集する方法」を知らないので、CSSOMを調べてみるといいと思う
https://triple-underscore.github.io/cssom-ja.html
2022/12/19(月) 14:10:45.85ID:GaFatWVX0
>>438
>>439
ありがとうございました
selectortextを呼び出して疑似的にプロパティ名で編集できるような関数を作ってみます。
2022/12/19(月) 21:50:19.67ID:K0fHbKFE0
https://developer.mozilla.org/ja/docs/Web/API/CSSStyleDeclaration/setProperty

let style = document.styleSheets[0].cssRules[0].style;
style.fontSize = "1em";
// style.setProperty("font-size", "1em");
2022/12/21(水) 07:34:30.54ID:nEbzRDrKH
>>441
ありがとうございます。

let styleの呼び出し箇所を関数にして
selector名のオブジェクトを生成し、その中にプロパティ名とvalueを格納して呼び出すような
簡易的な関数を作成してみます
年末のお忙しいとろ、アドバイスありがとうございました。
2022/12/21(水) 16:52:58.12ID:9yhxJASu0
小数点第4位を四捨五入するのは、parseFloat(a.toFixed(3))と Math.round(a*1000)/1000のどっちがいいでしょうか?
2022/12/21(水) 19:18:04.39ID:nEbzRDrKH
連日すみません。
<link rel="stylesheet" src>で読み込んだcssの
cssStylesheetプロパティにアクセスする方法を教えていただけないでしょうか?
2022/12/21(水) 21:53:16.64ID:paD1IZJK0
ちょっとググれば出てくるような情報までくれって言うのか?
2022/12/21(水) 22:46:02.69ID:nEbzRDrKH
すみません、ちょっとググってみます
2022/12/21(水) 23:16:30.68ID:paD1IZJK0
どうしても分からないならchromeのDevToolsのConsoleで
document.styleSheets
って打ってみれば中身が全て見れる
中身見ても意味不明な場合はやりたいことは出来ないかも
2022/12/21(水) 23:34:53.49ID:PQinZhLm0
jQuery最強伝説。
2022/12/22(木) 07:18:15.65ID:slpViawnH
>>447
それは試してみたんですけどundefinedなんですよね
他ファイルを参照した場合には、stylesheetがdocumentのプロパティになっていないようなのですよね
2022/12/22(木) 07:21:31.78ID:slpViawnH
>>447
すみません、訂正です
document.styleSheetで参照すると
document.styleSheet.cssRulesがnullとなってしまうんです
document.styleSheetで登録されるのは
同じファイル内のスタイルだけのよう?
他のcssファイルに書かれたスタイルを操作するには
どうしたらいいのでしょうか?
に訂正願います
2022/12/22(木) 07:48:35.40ID:YtaOqG2C0
document.styleSheetsの最後のs抜かしてないよな
document.styleSheets[0] みたいにインデックス使わないと参照できないぞ
2022/12/22(木) 09:18:28.13ID:N0yJkasM0
本当にやりたいのは、特定の要素のstyleを弄ることじゃないの?
2022/12/22(木) 13:29:52.00ID:kUDazAkOd
ワードプレスとかいうアレをイジってると特定idの親にスタイル変更したいとかはでてくる
2022/12/22(木) 17:03:26.78ID:J4HXq2Du0
よほどのことがなければ元ルールを直に書き変えるなんてしないよなぁ
cssRulesはクロスオリジンだとアクセスできないし
2022/12/22(木) 19:14:24.29ID:slpViawnH
みなさん、ありがとうございます。
関連した質問なのですが
cssが要素に適用される仕組みは
1:
<style>タグを読み込んだり<link ref>を読み込んだ時点で
ブラウザ実行環境にcssプロパティを記録して、セレクタを読み込んだ時に適用するのでしょうか?

それとも
2:
HTMLの要素を読み込んだ時に<style>タグや<link>先に走査して
cssの適用があるかを確認して適用する

なのでしょうか?
もし1なら、クライアントブラウザからアクセスできるような気がするのですけど
もし教えていただけるようでしたらご指導お願いします
2022/12/22(木) 20:32:53.94ID:NthFDCjcr
次の話に移る前にまず>>451>>452に答えるべきだろう
言葉遣いだけ丁寧にしてもそういうのが疎かだと相手にされなくなる
2022/12/23(金) 07:08:17.10ID:OG24yN7PH
>>452
424,437,440,442の記載の通り、cssRuleを直接編集したいと考えています

>>451
437,441,442で記載の通り、配列で受けとって編集することはできています
しかし別のスタイルシートでは同様の方法では参照できませんでした

>>445様のご指摘があって、再度検索してみたのですが
別スタイルシートのcssをオブジェクト化して参照する方法が見当たらず
今の質問に至っています

JQueryでできるようなレスがありましたので
JSでもできるのだろうなと思って次の質問をしました

皆様質問の仕方に失礼があっって申し訳ありませんでした
お許しくださいませ
2022/12/23(金) 08:30:41.88ID:d3IbDeU70
>>454 でクロスオリジンの場合にnullになるって指摘されてるけど、これに引っかかってるだけじゃないかな
この場合はどうにもならんと思う
2022/12/23(金) 10:44:42.21ID:Lv24OjDar
>>457
ブラウザのコンソールで↓を実行したらどうなる?
for(const ss of document.styleSheets){console.log(ss.href); console.log(ss.cssRules);}
2022/12/23(金) 17:28:12.54ID:o+ONuUnd0
>>458で指摘している通り、他の所から読み込んだスタイルはそもそも変更出来ないって書いてあるんじゃね?
https://w3c.github.io/csswg-drafts/cssom/

> Cross-origin stylesheets are not allowed to be read or changed.

>>459のように実際にcssRulesにアクセスすると自分の所のcssじゃない場合をアクセスしようとすると
Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
at <anonymous>:1:76
みたいなエラーになる

cssをいじりたいのだろうけど、そういう低層の話じゃなくて本当にやりたい事を書いた方が答えが得られると思うよ
結局何がやりたいのか全く分からんw
2022/12/23(金) 17:30:32.01ID:o+ONuUnd0
変な日本語になってるなw

>>459のように実際に自分の所のでは無いcssRulesをアクセスしようとすると
Uncaught DOMException: Failed to read the 'cssRules' property from 'CSSStyleSheet': Cannot access rules
at <anonymous>:1:76
みたいなエラーになる
2022/12/23(金) 19:30:29.91ID:OG24yN7PH
>>458
459,460,461

皆様ありがとうございます
具体的にこれをしたいというのはなかったんですけど
js勉強していまして、そういうことできるのかな?という質問でした

jsのエンジンは<link rel>を実行すると
jsの実行コンテキストを記録するメモリ部分に
<rel>の情報をロードして
HTML要素を読み込んだ時に参照するという挙動なら
クロスオリジンの適用を受けずに編集できるかなと
そういう疑問も持ちまして質問させていただきました

皆様ありがとうございました
2022/12/23(金) 20:54:13.31ID:2ps+kI7qr
>>462
>クロスオリジンの適用を受けずに編集できるかなと
君の>>450>>457の発言ではCSS参照が別ファイルでも同一オリジンでは問題なく出来て
別オリジンのみ問題が発生していると認識しているとは読み取れないけども
別ファイル即ち別オリジンと勘違いしてない?
同一オリジンなら別ファイルでも参照出来ることは理解してる?
2022/12/23(金) 20:55:49.05ID:OG24yN7PH
>>460
今勉強再開して思い出しました。
@keyframesのプロパティや値を
動的に変更したいと考えたのです

同じファイルなら
<style id="st">
として、stから@keyframesを設定編集できますが
外部ファイルでの設定編集ができないので
できたらいいな、って質問してみました
2022/12/23(金) 20:57:53.66ID:OG24yN7PH
>>463
勘違い、混乱してました。ありがとうございます!
2022/12/23(金) 21:10:25.93ID:2ps+kI7qr
>>465
で、>>450で参照したかったのは本当に別サーバ等のcssだったのか
それともhtmlやjsと同じ場所に置いてあるcssだったのかどっち?
2022/12/23(金) 21:19:54.48ID:OG24yN7PH
>>466
ローカルで、同じフォルダ内です
2022/12/23(金) 21:28:01.20ID:G5aj5uG70
@keyframesなんかも後のスタイルで再定義できるんだから
DOMにstyle要素追加してそこに上書きルール突っ込んでそっちを操作すればいいじゃない
2022/12/23(金) 21:39:17.88ID:2ps+kI7qr
>>467
それは本来別オリジンではないんだけどブラウザがローカルアクセスに対するセキュリティの一環として制限をかけてる模様
詳しくはググって
>>459のスクリプトを実行して
file:///~
の行のあとに例外が出るならそれが原因

対策としてはローカルにwebサーバを立ててhttp経由でアクセスする
そうすればスクリプト実行で例外が発生せずcssの中身が読み取れる
webサーバはそんな大層なものは必要なくてvscodeのLiveServerで十分
2022/12/23(金) 21:55:43.41ID:gwhrrj9D0
DevTools を弄れるなら、要素タブでスタイル欄を見れば
適用内容と設定元のファイルが行番号付きで確認できるし
アニメーションを弄りたいなら、「その他のツール」に「アニメーション」がある(chrome)
2022/12/24(土) 09:52:50.24ID:Lk0KbRC60
皆様いろいろありがとうございます
時間とれましたら確認させていただきます
2022/12/24(土) 10:46:15.28ID:se6E0pPpr
>>471
少し調べたらchromeのオプションでクロスオリジン制約を回避する方法があった
chrome クロスオリジン
で検索
これならwebサーバを立てる必要もなくてお手軽
2022/12/24(土) 14:27:49.26ID:0WYu35VL0
firefoxもsecurity.fileuri.strict_origin_policyをfalseにすれば回避できるけど
早いうちにローカルサーバ立てることを覚えた方が後が楽になると思うよ

対象要素が1つなら@keyframes書き換えるよりWebAnimationAPI使った方がいいかもしれないし
やりたいことはぼかさずにはっきり書いた方がいいよ
2022/12/24(土) 22:49:22.50ID:oMpeQZG30
HTA(hta+ie)にとって替わるみたいな環境っていまだにないのかな
PWAみたいのではなく、javascript(やvbs)でWindowsのフレームワーク(.NETやCOMやら)と連携できるようなやつが欲しい
WebView2は思想的にHTAと比べて退化してるようにしか見えないけどこれぐらいなのか…
2022/12/25(日) 03:50:26.67ID:Y7ZN657d0
>>474
そういや前はちょっとしたツールを HTA で書いたりしたけど、もう使えない?
2022/12/25(日) 12:52:51.27ID:GFtl9gAsH
皆さん、ありがとうございます
別シートのcssで可変にしたい部分を変数にし
読み込むシート側に変数専用のstyleタグを用意し
変数用のスタイルタグを編集することにしました

皆様いろいろとありがとうございました
2022/12/25(日) 13:14:34.27ID:g8CAn8EMr
要するにクロスオリジン問題を解決して>>450を実現したのではなくて
別の方法を取ったということ?
2022/12/25(日) 13:37:10.68ID:GFtl9gAsH
そうです
>>468様のアドバイスなら
私の学習レベルでもググり時間とられずにできそうだと思いまして

style.css
@keyframes xxx{ *** : var(--prm) }

index.html
<style id="prm"></style>
<script>
prm.innerHTML=":root {--prm:50% }"

のように、変数を編集するstyleタグを設けました
見栄え悪いしかっこ悪いんですけど
いろんな変数を設定変更する関数も自作できそうですので
とりあえずはこれでいいかなと
2022/12/25(日) 14:26:34.39ID:kQ0MTzKr0
>>478
それならわざわざstyle要素作って直に操作する必要はない
変数の最初の定義もcssファイルの方に書いておいて
変更したい時は
document.documentElement.style.setProperty("--prm", "100%");
とかすればいいだけ
2022/12/25(日) 15:40:19.02ID:GFtl9gAsH
>>479
ありがとうございます!そうさせていただきます。
今後ともいろいろ教えてください。ありがとうござました!
2022/12/25(日) 16:48:37.78ID:sJzx1gQhr
>>478
>私の学習レベルでもググり時間とられずにできそうだと思いまして
webサーバ云々が億劫だってのは分かるからしょうがないけども
せめて>>472ぐらいは実際に試して欲しかったな
ググって最初に出てくる記事にすぐ出来るやり方が具体的に書いてあるんだし
2022/12/25(日) 16:50:28.05ID:GFtl9gAsH
>>479
面白かったです。

<html><head><body><div>
どの要素にでも、setProperty('param','value')を設定しておけば
別ファイルに作ったスタイルシートの変数を参照できるのですね

疑似的なコードですが
<script>
body.setProperty('--color','red')
div.setProperty('--color','blue')
html.setProperty('--color','green)

とすると、子孫のスタイル設定が優先されることも理解できました
とても面白く学習できました、ありがとうございました
2022/12/25(日) 16:51:23.54ID:GFtl9gAsH
>>481
ありがとうございます
次時間ができたときにぜひ調べて実行してみます
2022/12/25(日) 17:00:33.10ID:gv3ThvO8d
もう解決したんだしどうでもいいからお礼だけ言って体よく話を打ち切りたいって思いがヒシヒシ伝わってくるな
2022/12/26(月) 13:51:42.59ID:fuxINEHv0
>>469
Live serverを使って、別のスタイルシートで設定した、フォント色の変更はOKでした。
ありがとうございました。

ただ、@keyframesに関しては、CSSKeyframeRule__{keyText..,style,,cssText,,}__までは見れたのですが
内容の変更方法が分からないため断念しました
時間あるときに再チャレンジしてみます

皆様ありがとうございました
2022/12/26(月) 15:01:08.23ID:pO4MU7IP0
var ptEQ = 25.4 / 72;
var SWmm = 0;

mainfn();
function mainfn() {
win1 = new Window('dialog', "Set Strokewidth");
win1.pnl = win1.add('panel');
win1.pnl.orientation = "column";

pg1 = win1.pnl.add('group');
pg1.orientation = "row";
pg1.add("statictext", [0, 0, 140, 23], "線幅を選択してください");

pg2 = win1.pnl.add('group');
rd21 = pg2.add("dropdownlist", [20, 40, 150, 65], ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm",
"0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"
]);
rd21.selection = 0;

pg9 = win1.pnl.add('group');
pg9.orientation = "row";
CAN = pg9.add("button", [0, 0, 100, 30], "cancel");
OK = pg9.add("button", [0, 0, 100, 30], "OK");
CAN.onClick = function() {
win1.close()
}
OK.onClick = function() {
win1.close();
dofn();
}
win1.show();
}
2022/12/26(月) 15:02:39.66ID:pO4MU7IP0
function dofn() {

var SWmmS = rd21.selection.text;
var SWmm = parseFloat(SWmmS);
var SWpt = SWmm / ptEQ;

var rectObj = activeDocument.pathItems.rectangle(-420.94488, 297.638, 150, 100);
rectObj.filled = false;
rectObj.stroked = true;
rectObj.strokeColor = CMYKfn(0, 0, 0, 100);
rectObj.strokeWidth = SWpt;
rectObj.selected = true;
rectObj.remove();

function CMYKfn(c, m, y, k) { 
COL = new CMYKColor(); 
COL.cyan = c; 
COL.magenta = m; 
COL.yellow = y; 
COL.black = k; 
return COL;
}
}
2022/12/26(月) 15:07:33.18ID:pO4MU7IP0
線幅を変更するスクリプトなのですが、一応完成しました。
自分で使うだけならこれでいいのですが、他人に使ってもらう場合、ダイアログに「線幅を追加する」という項目を増やしたいと思っています。
rd21 = pg2.add("dropdownlist", [20, 40, 150, 65], ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm", "0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"]);
のところに項目を追加していくようなコードを書くことは可能なのでしょうか?
自分自身を書き換えるコードだと思うのですが…
(削除はどうでしょうか? 例えば0.15 mmがいらないと思った場合、"0.15 mm"のを削除するコードを書くことは可能ですか?)
2022/12/26(月) 15:27:01.38ID:oXRhIFIqd
スレ内を線幅で検索しても何も引っかからないのにこの書き出しで何か伝わると思ってるのすごいわ

線幅の配列を関数内で直書きしてるから自身を書き換えるとか面倒なことを考える必要があるわけで
関数の外に変数で宣言しとけば追加も削除もなんとでもなるでしょ
2022/12/26(月) 15:55:16.01ID:gS/UmYxh0
確かIllustratorかなんかのスクリプトでしょ
ここ見てるほとんどはWebブラウザやnode.jsのJavaScriptは知っててもそっちは知らないと思う
文法的にはJavaScriptと同じでも出てくるオブジェクトは独自のものだろうし説明しないとわからんよ
2022/12/26(月) 16:14:37.67ID:pO4MU7IP0
>>489
素人でもエディタで開かないとダメということですね。

var mm = ["0.1 mm", "0.12 mm", "0.15 mm", "0.2 mm", "0.25 mm", "0.3 mm", "0.4 mm", "0.5 mm", "0.6 mm"]
// 線幅の項目を増やしたり削除したい場合は、上の1行を書き換えてください

こう先頭に書き加えました。
2022/12/26(月) 16:16:02.82ID:pO4MU7IP0
>>490
すみません
気を付けます
2022/12/26(月) 16:45:32.21ID:oXRhIFIqd
>>491
意図が理解されなかったということが分かった
コメント付けるって妥協するなら>>486のままでもいいでしょ

ここの住人はadobe独自のことは詳しくないんだし他所で聞いたほうが的確な答えが返ってくるよ
そもそもここはスレ違い
2022/12/26(月) 17:18:59.92ID:l7z7KEaud
>>475
htaまだまだこれからだ
ただhighDPI環境でスケーリング200%とかだとおかしな事になった想い出
2022/12/26(月) 22:12:09.27ID:LJgewTa3r
>>485
①chromeで↓のurlを開く
https://yari-demos.prod.mdn.mozit.cloud/ja/docs/Web/CSS/CSS_Animations/Using_CSS_animations/_sample_.making_it_move_back_and_forth.html

②chromeのコンソールを開いて↓を入力する
document.styleSheets[1].cssRules[1].cssRules[0].style.marginLeft = "50%"
2022/12/27(火) 15:47:36.10ID:LHsOSApx0
>>495
ありがとうございました
所望の動作を確認できました
JSはいろんな方法があるんですね
2023/01/02(月) 12:58:47.15ID:A6ceP6kcr
>>474
pythonのeelモジュールを使えば、昔のhtaっぽいことができます
2023/01/02(月) 17:25:19.15ID:V1TEslsJ0
>>497
OSに標準で入ってるedgeで使えるのはいいなあ
情報ありがとう
499デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51])
垢版 |
2023/01/04(水) 19:01:14.59ID:jNmuxM610
「無名関数」、「関数リテラル」の理解がちょっとぼやけています。

次の様なコードがあったとき、
let calcResult = function calc(a,b){
return a*b;
}

calc()
と()をつけて表せるものが普通の関数、それを変数に代入したもの
calcResult
が関数リテラルかと思っていました。
しかし、どうやら違うようで。。
500デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51])
垢版 |
2023/01/04(水) 19:01:57.33ID:jNmuxM610
例えば以下の2つの関数があります。

■「function関数」を変数に格納
let calcResult1 = function calc(a,b){
return a*b;
}

■「無名関数」を変数に格納
let calcResult2 = function(a,b){
return a*b;
}

「無名関数」は「関数リテラル」と同義である。とさまざまな文献に記述されています。

ならば、
calcResult1
は、関数リテラルではない。

calcResult2
は、関数リテラルである。

という認識で間違っていないでしょうか?
501デフォルトの名無しさん (ワッチョイ 8202-9yt5 [27.92.176.51])
垢版 |
2023/01/04(水) 19:02:26.96ID:jNmuxM610
SetInterval()
に与える引数は、関数リテラルでなくてはならないそうです。

となると、以下は誤りで、
SetInterval(calcResult1,1000);

以下なら問題ない
SetInterval(calcResult2,1000);

という理解でよろしいでしょうか?
2023/01/04(水) 20:37:28.67ID:UYb7FHhp0
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/function

https://developer.mozilla.org/ja/docs/Glossary/Literal
リテラルに関数は含まれてないな

「関数リテラル=無名関数」が間違ってて、calcResult1 も calcResult2 は、関数リテラル。
とイコールで結んじゃうのは乱暴か
字義に従えば「無名関数」には生成時に名前をつけなかった、程度の意味しかないかと

ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼない
結果的に関数式の関数は無名関数になることがほとんどで
2023/01/04(水) 20:40:11.89ID:UYb7FHhp0
ここでいう「関数リテラル」は関数式で記述された関数のことで、名前があろうとなかろうと「関数リテラル」でいいんだと思う
2023/01/04(水) 20:53:07.39ID:UYb7FHhp0
途中送信で変になってるからまとめ直し

>>500,501
その文脈での「関数リテラル」ってのは関数式で記述された関数のこと(>>502のリンク参照)で、名前の有無は関係ない
名前のあるcalcResult1 も 名前のないcalcResult2 も「関数リテラル」という理解でいいと思う
「無名関数」の「無名」には生成時に名前をつけなかった、程度の意味しかないかと

ただ、関数式として生成された関数は変数に格納するか、でなければ他の関数の引数になるので、名前をつける意味はほぼなくて結果的に無名関数になることがほとんどではある
2023/01/04(水) 20:57:54.46ID:jNmuxM610
>>502
すっごい分かりやすい。
モヤモヤしていたのがすっきりしました。
ありがとうございました。
2023/01/04(水) 21:00:20.48ID:GLj+17iFr
調べたら自分を再帰的に呼び出す場合に名前を付けるって例があってなるほどと思った
2023/01/04(水) 21:21:00.43ID:GLj+17iFr
ちなみに>>501のsetIntervalの引数は関数リテラルでないといけないってのはどこ情報?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況