🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

Q&A

解決済

1回答

2347閲覧

HTML内の画像リストを取得したい

inukujira

総合スコア130

Angular

Angularは、JavaScriptフレームワークです。AngularJSの後継であり、TypeScriptベースで実装されています。機能ごとに実装を分けやすく、コードの見通しが良いコンポーネント指向です。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

0グッド

1クリップ

投稿2020/01/03 04:31

編集2020/01/03 04:32

教えてください。
HTML内のimgリストを取得する方法がわかりません。

厳密にはng-template要素内にあるimgリストを取得して、それぞれ画像の読み込みを完了した後に
HTML画面へ出力するような動きにしたいのですが、それ以前にリスト取得が出来ずに困っています。

やったことは、div要素に変更したのちDocument オブジェクトの getElementsByName() メソッドを利用すれば
何の迷いもなくリスト取得する事が出来るんですが、その場合だとブラウザの読み込みが開始された直後に
画像のダウンロードまで同時に走ってしまいNGでした。(自動で画像イメージをダウンロードしない方法があれば良いのですが…)

単純にページが開く前に画像を読み込んで、全ての画像を読み込んだら画面表示したいだけです。
どなたかご教示ください。

■ サンプルコード
https://stackblitz.com/edit/angular-xgqbdx

HTML

1<ng-template #imagelist> 2 <img src="https://wallpaperaccess.com/full/11746.jpg" /> 3 <img src="https://wallpaperaccess.com/full/11747.jpg" /> 4 <img src="https://wallpaperaccess.com/full/11748.jpg" /> 5 <img src="https://wallpaperaccess.com/full/11749.jpg" /> 6 <img src="https://wallpaperaccess.com/full/11750.jpg" /> 7</ng-template>

TypeScript

1import { Component, ViewChild, AfterViewInit } from "@angular/core"; 2 3@Component({ 4 selector: 'my-app', 5 templateUrl: './app.component.html', 6 styleUrls: [ './app.component.css' ] 7}) 8export class AppComponent { 9 @ViewChild('imagelist', {static: false}) img; 10 ngAfterViewInit() { 11 console.log(this.img); 12 } 13}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

丸々回答してしまうと、作業依頼となるうえに、かなり膨大になりますので、
方法の一つだけ回答いたします。

  1. コンポーネントにて、テンプレート内HTMLを取得できるようにする。

typescript

1// ElementRefを読み込む 2import { Component, ViewChild, AfterViewInit, ElementRef } from '@angular/core'; 3 4export class AppComponent { 5 @ViewChild('imagelist', {static: false}) img; 6 7 // クラスのメンバとして、DOMを受け取れるようにしておく 8 private elDom: HTMLElement; 9 10 // constructorで、DOMを取得 11 constructor( 12 // ElementRefをクラス内で使用できるようにしておく 13 private el: ElementRef 14 ) { 15 // this.elDomには、ng-tamplate自体(HTMLDOM)が格納される 16 this.elDom = this.el.nativeElement; 17 } 18 19 ngAfterViewInit() { 20 // DOMとして、JavaScript処理ができる 21 this.elDom.querySelectorAll('img').forEach(e => { 22 // 確か、Angular上では、NodeListに直接forEachが使えた、はず 23 console.dir(e); 24 }); 25 } 26}
  1. imgをsrcには、透明の1pxの画像など、表示されない画像にし、本ちゃんの画像パスは、data-srcなどの、javascriptで取得しやすい属性に入れる。

(srcに入っていると、HTMLに存在するだけで、読み込みが先に走ってしまうので)
3. 対象imgに共通クラスをつける。
4. ngAfterViewInit()の中にて、クラスを付けた対象imgを走査処理し、data-srcのパスを、srcに入れる。
先読みをさせたいなら、new Image()などを使って、先に画像を読み込み、成功したら、DOM上のsrcに入れるなどする

DOMさえとってこれれば、あとは、通常のJavaScript処理が可能になりますので、その後は、
画像読み込みのJS開発と同じ感覚で処理をすることができます。
しかし、これはあくまで方法の一つなので、
もっといい方法や、Angularの枠組み内で完結できる方法があるかもしれません。

投稿2020/01/04 08:41

miyabi_takatsuk

総合スコア9555

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

inukujira

2020/02/19 01:45

返信おそくなりました! この回答で解決できそうです!ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問