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

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

詳細はこちら
JavaScript

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

HTML

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

Q&A

解決済

1回答

748閲覧

ポップアップを実装したい

shunsaku87

総合スコア39

JavaScript

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

HTML

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

0グッド

0クリップ

投稿2020/11/25 05:50

編集2020/11/25 05:52

前提・実現したいこと

既存のサイトにポップアップが実装されているのですが、追加でもう一つ同じ形式のポップアップを実装したいです。
サイト
↑この「中部経済新聞に掲載されました。」というところをクリックすると、
ポップアップ
↑このようなポップアップが表示されます。
今回この下の「中部経済新聞に「試薬管理システム開発」が掲載されました。」というところをクリックすると同じようなポップアップが表示されるようにしたいです。
jsは全然わかりません。jqueryは少しわかります。
html,cssはよくわかります。

発生している問題・エラーメッセージ

自分が作ったサイトではないものです。ftpを使ってファイルをダウンロードしてきて、新たにポップアップを実装しようとしています。
jsのファイルはmain.bundle.jsというものがひとつだけサーバーにありましたが、どこをどう変えれば新たにポップアップを実装できるのかわかりません。コードを記載しますので、どこをどう変えたり追加したりすれば実装できるかを教えて頂きたいです。

該当のソースコード

javascript

1function n() { 2 ! function () { 3 var t = document.documentElement, 4 e = window.scrollY, 5 r = document.querySelector(".modal"), 6 n = document.querySelector(".js-open-modal"), 7 i = document.querySelector(".js-close-modal"); 8 window.addEventListener("scroll", (function () {})), n.addEventListener("click", (function () { 9 var r = document.querySelector('[data-modal-id="1"]'); 10 e = window.scrollY, r.classList.add("is-show"), t.classList.add("is-open-modal") 11 })), i.addEventListener("click", (function () { 12 r.classList.remove("is-show"), t.classList.remove("is-open-modal"), window.scrollTo(0, e) 13 })); 14 var s = r.querySelector(".js-scrollable"), 15 o = null; 16 s.addEventListener("touchstart", (function (t) { 17 t.targetTouches.length > 1 || (o = t.targetTouches[0].clientY) 18 }), !1), s.addEventListener("touchmove", (function (t) { 19 if (!(t.targetTouches.length > 1)) { 20 var e, r = t.targetTouches[0].clientY - o; 21 if (0 === s.scrollTop && r > 0) t.preventDefault(); 22 else(e = s).scrollHeight - e.scrollTop <= e.clientHeight && r < 0 && t.preventDefault() 23 } 24 }), !1) 25 }() 26 } 27

javascriptはすごく長いコードでした。その中でhtmlに記載されているクラス名のついた、ポップアップに関係していると思われる部分を抜粋して上記に記載しました。

html

1<section class="area-media"> 2 <div class="content-frame"> 3 <h2 class="title"><span class="main">MEDIA</span><span class="sub">メディア</span></h2> 4 <ul class="list"> 5 <li class="list__item"><a class="link js-open-modal" data-target-modal="1"><span class="meta">2020.01.07</span><span class="title">中部経済新聞に掲載されました。</span></a></li> 6 <li class="list__item"><a class="link js-open-modal" data-target-modal="2"><span class="meta">2020.11.12</span><span class="title">中部経済新聞に「試薬管理システム開発」が掲載されました。</span></a></li> 7 </ul> 8 </div> 9 </section> 10 </main> 11 <div class="modal" data-modal-id="1"> 12 <div class="modal__inner js-scrollable"> 13 <div class="modal__content"> 14 <div class="block-article"> 15 <div class="box-image"><img class="img" src="../assets/img/company/img_1.png"></div> 16 </div><span class="js-close-modal"><i class="effect"></i><span class="text">閉じる</span></span> 17 </div> 18 </div> 19 </div> 20 <div class="modal" data-modal-id="2"> 21 <div class="modal__inner js-scrollable"> 22 <div class="modal__content"> 23 <div class="block-article"> 24 <div class="box-image"><img class="img" src="../assets/img/company/201124_zisseki.jpg"></div> 25 </div><span class="js-close-modal"><i class="effect"></i><span class="text">閉じる</span></span> 26 </div> 27 </div> 28 </div>

htmlはテキスト部分のli要素をもともとのコードから追記しました。
また、モーダルの表示部分が新たに必要だと思い、data-modal-id="2"というクラスのついたdiv以下をもともとのコードから追記しました。もともとはdata-modal-id="1"というクラスのついたdiv内のコードしかありませんでした。

試したこと

ちょっと調べて、querySelector('[data-modal-id="1"]')の部分をquerySelectorAll('[data-modal-id="1"],[data-modal-id="2"]')として動くかなと思いやってみましたがだめでした。

また、上記のjsの部分だけ全体を複製して、下に追記し、querySelector('[data-modal-id=""]')の部分をquerySelector('[data-modal-id="2"]')としたら動くかなと思いましたが、だめでした。

補足情報(FW/ツールのバージョンなど)

jsはほとんどわかりません。すみませんどうしたらポップアップを実装できるか教えてください。
よろしくお願い致します。

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

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

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

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

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

kei344

2020/11/25 06:21

teratailでは画像もアップできますので、ご自信で所持されている画像であればそちらを使用されてはいかがでしょうか。(画像として質問文に表示されますし)
guest

回答1

0

ベストアンサー

提示されたコードだけでは再現できないので推測ですが、以下のようにしてみてはいかがでしょうか。
まず、

JavaScript

1// 6行目 2n = document.querySelectorAll(".js-open-modal"), // Allを追加

そして以下の部分を

JavaScript

1 window.addEventListener("scroll", (function () {})), n.addEventListener("click", (function () { 2 var r = document.querySelector('[data-modal-id="1"]'); 3 e = window.scrollY, r.classList.add("is-show"), t.classList.add("is-open-modal") 4 })), i.addEventListener("click", (function () { 5 r.classList.remove("is-show"), t.classList.remove("is-open-modal"), window.scrollTo(0, e) 6 }));

下記のように変更

JavaScript

1 window.addEventListener("scroll", (function () {})), 2 n.forEach(function(element, index, array){ 3 element.addEventListener('click',(function () { 4 var r = document.querySelector('[data-modal-id="1"]'); 5 var src = element.dataset.src; 6 r.querySelector('img').setAttribute("src", src); 7 e = window.scrollY, r.classList.add("is-show"), t.classList.add("is-open-modal") 8 })) 9 }), i.addEventListener("click", (function () { 10 r.classList.remove("is-show"), t.classList.remove("is-open-modal"), window.scrollTo(0, e) 11 }));

HTMLも若干変更します。

html

1<a class="link js-open-modal" data-target-modal="1">

上記に以下のようにモーダルに表示する画像の情報を入れます。(2つ目のリンクも同様に)

html

1<a class="link js-open-modal" data-target-modal="1" data-src="../assets/img/company/img_1.png">

モーダルの構造は2つともsrc="..."の部分以外は共通のようなので、一つだけにして、JSで.imgのsrc属性を書き換える仕様にします。

投稿2020/11/25 09:58

編集2020/11/26 10:18
cerfweb

総合スコア1907

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

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

shunsaku87

2020/11/26 06:38

丁寧に読んでいただき、しっかり回答いただき、本当にありがとうございます。 無事実装できました。 心から感謝いたします。 本当にありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問