質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.31%
JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

1回答

547閲覧

ループで作成した各コンテンツ<div>をslick-sliderを用いて動かしたいです。ループごとにスライダーを1つ作るイメージです

Rin22209853

総合スコア5

JavaScript

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

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2024/02/08 09:42

編集2024/04/26 06:11

実現したいこと

ページを開いたときに、各コンテンツごとに1スライダーを出力したいです。
例)
Title1
slick-slider<div1><div1><div1>・・・・webパーツ
Title2
slick-slider<div2><div2><div2>

発生している問題・分からないこと

上手く表示されるエリアとされないエリアがランダムで発生します。
slick-sliderが動いていないのでコード構成ができておらずそのエリアのwebパーツ<div>要素が縦に並んでしまいます。色々試しましたが、現状一番落ち着いているコードを記載いたしますので。
お手数おかけして申し訳ございませんがお力添えをお願いいたします。

該当のソースコード

php(.php)

1 <?php 2 $sections2 = [ 3 ['id2' => '01', 'templateId2' => '外部webパーツIDです', 'header2' => 'ヘッダー','comment2'=>'コメント'], 4 ['id2' => '02', 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 5 ['id2' => '03', 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 6 ['id2' => '04' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 7 ['id2' => '05' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 8 ['id2' => '06' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 9 ['id2' => '07' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 10 ['id2' => '08' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], 11 ['id2' => '09' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント] 12 ]; 13 foreach ($sections2 as $section2) { 14 extract($section2); 15 ?> 16 <section class="lp__pickup l-section" id="link-n1-U<?= $id2 ?>"> 17 <div class="l-container" id="link-n1-<?= $id2 ?>"> 18 <header class="lp__pickup-header heading__Lv2-wrap-center anime-fadeInBottom"> 19 <h1 class="heading__Lv1-main t-tCenter anime-splitStrFadeIn t-outline_b" data-splitdelay=".1"><?= ($header2); ?>の例</h1> 20 <h2 class="heading__Lv3-main t-tCenter t-outline_b"><?= ($comment2); ?></h2> 21 </header> 22 </div> 23 <div class="lp__pickup-list"> 24 <div class="porters__pickup" id="js-pickup-list"> 25 <script type="text/javascript" src="https://app-webparts-hrbc.porterscloud.com/po-b.js" data-template-id="<?= $templateId2 ?>"></script> 26 <script type="porters/webparts"></script> 27 </div> 28 </section> 29 <?php }?>

jQuery(.min.js)

1"use strict"; 2jQuery(function(i) { 3 var o = !1, 4 e = new MutationObserver(function(e) { 5 if (0 == o && i(".porters__pickup .po-joblist > *").length) { 6 i(".porters__pickup .po-joblist > *:not(.po-job-item),.po-header").remove(); 7 i(".porters__pickup .po-joblist.slick-initialized").slick("unslick"); 8 i(".porters__pickup .po-joblist").slick({ 9 autoplay:true, 10 accessibility:true, 11 pauseOnFocus:true, 12 dots: !1, 13 arrows: !0, 14 appendArrows: i("#js-pickup-arrow"), 15 infinite: !0, 16 speed: 500, 17 variableWidth: !0, 18 slidesToScroll: 1, 19 centerMode: !0, 20 slidesToShow: 4 21 }); 22 o = !0; 23 } 24 }), 25 t = document.getElementById("js-pickup-list"); 26 e.observe(t, { 27 childList: !0, 28 subtree: !0, 29 characterData: !0 30 }); 31}); 32

slick.min.js

1特になし

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

【検索でやったこと】
Googleで書かれていたループごとにIDを振り、それにjquaryを対応させる方法を試しました。
→webパーツの表示すらされなくなってしまいました。
【自分でやったこと】
jquaryの実行条件を緩和してみました。
いろいろな場所にwebパーツが散らばってしまいました。
条件に合致する要素が現れるたびにこのjquaryを実行するよう方法を試しました。
→webパーツの表示すらされなくなってしまいました。
f5を何回か押すとすべて正常な形で出力されることから、ぺージが開かれたときに5回くらいf5かける仕様も試しました。
→webパーツの表示すらされなくなってしまいました。

補足

WEBパーツは「porters Web Parts」を使っています。
仮想環境はXAMMP/WordPress内の1ページになります。

かなり悩んでいる所になりますので、ご尽力いただけますと大変助かります。
申し訳ございませんがよろしくお願いいたします。

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

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

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

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

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

Lhankor_Mhy

2024/02/08 10:06

.po-joblist がHTMLに存在しませんが、これはWEBパーツの中に存在するのですか?
Rin22209853

2024/02/08 10:10

はい、WEBパーツの中に.po-joblistが存在いたします。
Lhankor_Mhy

2024/02/08 10:11

PHP から HTML が出力されたとき、id="js-pickup-list" が複数存在しませんか? その辺りが原因ではないかと疑っています。
Lhankor_Mhy

2024/02/08 10:18

上記補足依頼、手元で確認しました。やはり複数存在するようです。
Rin22209853

2024/02/08 10:35

id="js-pickup-list" が複数存在いたします。 また本来作成しようとしてましたスライダーの矢印 <div class="l-container" id="js-pickup-arrow"></div>も同じものが何度も出てきました。 <div class="lp__pickup-list"> <div class="porters__pickup" id="js-pickup-list"> <script type="text/javascript" src="https://app-webparts-hrbc.porterscloud.com/po-b.js" data- template-id="<?= $templateId2 ?>"></script> <script type="porters/webparts"></script> </div> <div class="l-container" id="js-pickup-arrow"> </section>
perfectibility

2024/02/12 00:19

回答には関係のないことですが失礼します。 タグにJavaとありますが、JavaとJavaScriptは別のプログラミング言語ですので関係ないタグではないでしょうか?
Rin22209853

2024/02/12 02:30

ご連絡ありがとうございます。 タグ修正いたしました。 申し訳ございません!
guest

回答1

0

ベストアンサー

#js-pickup-list が複数存在することが原因のひとつでしょうから、.porters__pickupをforEachで回してobserveするのはどうでしょうか。

当方では動作確認ができませんので、これだけで動くようになるかどうかはわからないです。

投稿2024/02/08 10:20

Lhankor_Mhy

総合スコア37409

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

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

Rin22209853

2024/02/08 10:36

試してみます…! この度はお忙しいところご対応いただき誠にありがとうございました。 またお聞きすることもあるかと存じますがその時はよろしくお願いします。
Rin22209853

2024/02/08 10:46

ご回答いただき誠にありがとうございました。 頂いた内容でコードを書き換えたらすべてスライダーが生成されるようになりました。 ここでかなり詰まっていたので本当にありがとうございました。 ベストアンサーとさせていただきます。 またご縁がありましたらご指導ご鞭撻のほど何卒よろしくお願い申し上げます。 以下変更後のコードになります。 === "use strict"; jQuery(function($) { var maxAttempts = 5; var currentAttempt = 0; function initializeSlider(portersPickup) { var initialized = false; var observer = new MutationObserver(function(mutationsList) { mutationsList.forEach(function(mutation) { if (mutation.type === 'childList' && mutation.addedNodes.length > 0 && !initialized) { $(portersPickup).find(".po-joblist > *:not(.po-job-item), .po-header").remove(); $(portersPickup).find(".po-joblist.slick-initialized").slick("unslick"); $(portersPickup).find(".po-joblist").slick({ autoplay:true, accessibility:true, pauseOnFocus:true, dots: false, arrows: true, appendArrows: $(portersPickup).find("#js-pickup-arrow"), infinite: true, speed: 500, variableWidth: true, slidesToScroll: 1, centerMode: true, slidesToShow: 4 }); initialized = true; } }); }); var observerOptions = { childList: true, subtree: true, characterData: true }; observer.observe(portersPickup, observerOptions); } function attemptInitialize() { $(".porters__pickup").each(function() { initializeSlider(this); }); currentAttempt++; if (currentAttempt < maxAttempts) { setTimeout(attemptInitialize, 1000); } } attemptInitialize(); });
Rin22209853

2024/08/23 12:20

補足・sliderを一意にすることで改善されました。 <div id="js-pickup-list<?= $id2 ?>" class="porters__pickup slider<?= $id2 ?>"> ■PHP <?php $sections2 = [ ['id2' => '01', 'templateId2' => '外部webパーツIDです', 'header2' => 'ヘッダー','comment2'=>'コメント'], ['id2' => '02', 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '03', 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '04' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '05' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '06' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '07' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '08' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント], ['id2' => '09' 'templateId2' => '外部webパーツIDです', 'header2' =>ヘッダー','comment2'=>'コメント] ]; foreach ($sections2 as $section2) { extract($section2); ?> <section class="lp__pickup l-section" id="link-n1-U<?= $id2 ?>"> <div class="l-container" id="link-n1-<?= $id2 ?>"> <header class="lp__pickup-header heading__Lv2-wrap-center anime-fadeInBottom"> <h1 class="heading__Lv1-main t-tCenter anime-splitStrFadeIn t-outline_b" data-splitdelay=".1"><?= ($header2); ?>の例</h1> <h2 class="heading__Lv3-main t-tCenter t-outline_b"><?= ($comment2); ?></h2> </header> </div> <div class="lp__pickup-list"> <div id="js-pickup-list<?= $id2 ?>" class="porters__pickup slider<?= $id2 ?>"> <script type="text/javascript" src="https://app-webparts-hrbc.porterscloud.com/po-b.js" data-template-id="<?= $templateId2 ?>"></script> <script type="porters/webparts"></script> </div> </section> <?php }?> ■js "use strict"; jQuery(function($){ var jobDispEndFlag = false; const config = { childList: true, subtree: true, characterData: true }; var observer1 = new MutationObserver(records => { if(jobDispEndFlag == false && $('.slider01 .po-joblist > *').length){ $('.slider01 .po-joblist > *:not(.po-job-item),.po-header').remove(); $('.slider01 .po-joblist .slick-initialized').slick('unslick'); slickinitial01(); jobDispEndFlag = true; } }); const elem1 = document.getElementById('js-pickup-list01'); observer1.observe(elem1, config); function slickinitial01(){ $('.slider01 .po-joblist').slick({ autoplay:true, autoplaySpeed:3500, arrows: true, appendArrows: $('#js-pickup-arrow'), infinite: true, speed: 300, variableWidth: true, slidesToScroll: 1, centerMode: true, slidesToShow: 4, }); } }); "use strict"; jQuery(function($){ var jobDispEndFlag = false; const config = { childList: true, subtree: true, characterData: true }; var observer1 = new MutationObserver(records => { if(jobDispEndFlag == false && $('.slider02 .po-joblist > *').length){ $('.slider02 .po-joblist > *:not(.po-job-item),.po-header').remove(); $('.slider02 .po-joblist .slick-initialized').slick('unslick'); slickinitial02(); jobDispEndFlag = true; } }); const elem1 = document.getElementById('js-pickup-list02'); observer1.observe(elem1, config); function slickinitial02(){ $('.slider02 .po-joblist').slick({ autoplay:true, autoplaySpeed:3500, arrows: true, appendArrows: $('#js-pickup-arrow'), infinite: true, speed: 300, variableWidth: true, slidesToScroll: 1, centerMode: true, slidesToShow: 4, }); } });
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問