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

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

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

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

jQuery

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

Q&A

1回答

401閲覧

ECサイトで生成されるアイテムとアイテムの間にバナーを入れたい

unoman

総合スコア4

JavaScript

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

jQuery

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

0グッド

0クリップ

投稿2022/03/14 13:42

編集2022/03/14 14:52

はじめまして、

■やりたいこと
サイトデザインを編集しているのですが商品と商品の間にバナーを差し込みたいです。
具体的には<div class="item"><img src=""></div>の100番目です。

<div class="item"><img src=""></div>は管理画面でアイテムを生成しています。

■問題
バナーが差し込まれるところまで画面をスクロールすると
HTML要素が一瞬表示されてしまいます。
これをなくしたい。

■HTML <div class="ItemListInner crin"> <div class="item"><img src=""></div> <div class="item"><img src=""></div> | |x300 | <div class="item"><img src=""></div> <div class="item"><img src=""></div> </div>

下記の写真のイメージ
イメージ説明

入れたいバナーですが、スライダーです。

■HTML <!--▼.ItemListInner .itemの間に入れる要素▼ --> <div class="addition"> <ul class="slider"> <li><a class="slider-item01" href=""><img src=""></a></li> <li><a class="slider-item01" href=""><img src=""></a></li> <li><a class="slider-item01" href=""><img src=""></a></li> <li><a class="slider-item01" href=""><img src=""></a></li> </ul> </div> <!--▲.ItemListInner .itemに突っ込む要素▲ -->
■スタイルシート <style> //.itemの100番目に入れる空白の要素 に.spaceでrelativeをつかって空白をねじ込んでます。 .space{    position: relative; display: inline-block; padding-top: 150%; vertical-align: bottom; box-sizing: border-box; } // .itemの100番目に入れるスライダーの親要素.additionをabsoluteで.spaceの上に載せてます。 .addition { position: absolute; left: 0; width: 100% ; text-align: center;    background:#f00; margin-top: -27.5vmin ; } </style>

下にスクロールすると画面した付近でjQuery.Bottomプラグインが発動して次のページが読み込まれるという遅延ロードが始まります。
AJAXで制御されています。

<script type="text/javascript"> var process_flg = false; var end_flg = false; $(window).bottom({proximity: 0.05}); $(window).on('bottom', function() { if (process_flg == false && end_flg == false) { var max_page = $("#max_page").text(); var next_page = $('#next_page').text(); if (eval(max_page) >= eval(next_page)) { $.ajax({ url: "{LoadItemsPageURL}" + next_page + "{LoadItemsPageURLParams}", dataType: 'html', beforeSend: function () { process_flg = true; $('#loading').css('display', 'block'); }, success: function (data) { $('#mainContent .ItemListInner').append(data); next_page = eval(next_page) + 1; $('#next_page').text(next_page); /* ▼.itemに入れる要素 ▼*/ $(function() { setTimeout(function(){ let baneritem1 = $('.ItemListInner div.item:nth-child(100)'); banneritem1.append( $('.addition')); // .itemの100番目に入れる要素 },400); let banneritem2 = $('.ItemListInner div.item:nth-child(100)'); banneritem2.append('<div class="space"></div>'); //.itemの100番目に入れる空白の要素 });                /*▲ .itemに入れる要素 ▲*/ }, complete: function () { process_flg = false; $('#loading').css('display', 'none'); } }); } else { end_flg = true; } } }); </script> コード

コレをやると100番目にスライダーは読み込まれるのですが・・・
途中でフッターが読み込まれるたびにHTML要素が一瞬表示されてしまいます。
なんとかならないでしょうか?
よろしくお願いいたします。

イメージ説明

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

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

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

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

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

guest

回答1

0

この時間なので、明日、質問のコードを実際に走らせて再現してみようと思うのですが。
以下のような方法はとれないということですよね?

html

1<div class="ItemListInner crin"> 2 <div class="item"><img src=""></div> 3 <div class="item"><img src=""></div> 4 | 5 |x99 6 | 7 <div class="item"><img src=""></div> 8</div> 9 10<!--▼.ItemListInner .itemの間に入れる要素▼ --> 11<div> 12 <ul class="slider"> 13 <li><a class="slider-item01" href=""><img src=""></a></li> 14 <li><a class="slider-item01" href=""><img src=""></a></li> 15 <li><a class="slider-item01" href=""><img src=""></a></li> 16 <li><a class="slider-item01" href=""><img src=""></a></li> 17 </ul> 18</div> 19<!--▲.ItemListInner .itemに突っ込む要素▲ --> 20 21<div class="ItemListInner crin"> 22 <div class="item"><img src=""></div> 23 <div class="item"><img src=""></div> 24 | 25 |x200 26 | 27 <div class="item"><img src=""></div> 28</div>

投稿2022/03/18 17:27

penguin520

総合スコア345

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

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

unoman

2022/03/18 18:32

ありがとうございます!! そうなんです、できないんですよ。ちなみに書き忘れたのですがレスポンシブルになっております ブレイクポイントは3つあって600(横並びアイテム数2個),960(横並びアイテム数3個)、1200(横並びアイテム数4個)になります。うまくレスポンシブルに合わせて100%表示でスライダーが入って行かないですね。 今は無理やりposition: relative;要素でボックスを差し込んで、その上にposition: absolute;でwidth:100%;でやるから上下真中にスライダーが収まってくれません。 画面広げたり縮めると、どちらかが見切れたり、異様に余白ができたりします。 appendで差し込んでposition:absolute;をCSSで無理やり差し込むからabsoluteのtop:;を入れられないです。 item要素から抜けてページのTOPまで行っちゃいます。 あとは、javascripよりHTMLのほうが表示速度が早いのでスクロールすると一瞬HTML要素が見えちゃうんですよね。画像はsetTimeOutで遅延でできるんですけどHTMLだけは・・・ 困っております。
penguin520

2022/03/19 06:18

なるほど。レシポンシブの構造なんですね。 質問にあるコードを使えば再現できるのは間違いないでしょうか? 夕方くらいに時間があれば再現してみようと思います。 >一瞬HTML要素が見えちゃう visibility:hidden とかで隠すというのではだめなんでしょうか? とりあえず、どのような動作をするのか見てみたいので 再現してみます。
unoman

2022/03/19 08:05

ありがとうございます そうなんです・・・。レスポンシブルなんです。 BASEのHelsinkiというテンプレートでやっています。デモも見れたはずです。
penguin520

2022/03/26 06:41

BASEのHelsinkiというテンプレートがあるんですね。 こちらで再現性があるか検証しようとしたのですが、 なにか開発をしているのではなくて、テンプレートを改造しているだけのようですので、 すこし優先度が低いかと思いまして、まだ行っておりません。 (まぁ、そんなもののためにMP消費するのもなぁというところです。) 明日の夜に、時間があればやってみます。 とは、いえ、こちらも1件、アクシデントを抱えているので、それ次第です。 よろしくおねがいします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問