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

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

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

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

jQuery

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

HTML

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

Q&A

解決済

1回答

2664閲覧

スライド画像(bxslider)の修正

spring

総合スコア48

JavaScript

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

jQuery

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

HTML

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

1グッド

1クリップ

投稿2015/12/10 12:16

編集2015/12/10 12:51
<span id="curIndex"><{ページ番号の変数}"/></span> <ul class="bx_slider"> <foreach 画像があるだけ> <li class="img"> <img src=""/> </li> </foreach> </ul>

上記のようなスライド画像を使用しております。
画像には一つ一つIDが振られておりそのID分URLがあります。
そのURL一つ一つがID分画像をスライドできるようになっております。
現在、スライドの画像は「bxSlider」というプラグインを使用しており、画像枚数の表示が本来の枚数より2枚多いため直しています。
そしてbxSlider.jsを呼び出している箇所の下を下記のように修正しました。

bxslider.cssファイルの呼び出し。 bxslider.jsファイルの呼び出し。 <script type="text/javascript"> $(document).ready(function() { $('.bx_slider').bxSlider({ startSlide : <{ページ番号の変数} -1/>, pager : false, captions : true, onSlideNext : function() { $('#curIndex').text(pagemax === count ? count = 1 : ++count); }, onSlidePrev : function() { $('#curIndex').text(1 === count ? count = pagemax : --count); } }); var $img = $('.img'), pagemax = $img.length, count = <{ページ番号の変数}"/>; }); </script> ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ bxslider.cssの呼び出し。 bxslider.jsの呼び出し。 <script type="text/javascript"> $(document).ready(function() { var $img = $('.img'), pagemax = $img.length, count = <{ページ番号の変数}"/>; $('.bx_slider').bxSlider({ startSlide : <{ページ番号の変数} -1/>, pager : false, captions : true, onSlideNext : function() { $('#curIndex').text(pagemax === count ? count = 1 : ++count); }, onSlidePrev : function() { $('#curIndex').text(1 === count ? count = pagemax : --count); } }); }); </script>

枚数分カウントが表示されるようになりましたが、
今度は読み込みが終わったところで1枚前の画像が表示されるようになりました。
右にスライドすると最初だけ1枚飛ばしで画像が移動してしまいます。

startSlide : <{ページ番号の変数} -1/>の部分 「-1」を消すとスライドの動作が壊れます。
どのように壊れるかというと最後の画像が1枚目の画像になってしまいます。

どのように修正すれば正常に出来るでしょうか?
調べても解決行かず、すみません、お助け下さい。

dsk👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

ちょっとHTMLとかJavaScriptでは見慣れないタグやコメントの表記がありましたが、
{ページ番号の変数}が肝であるのは間違いないところです。

また、bxSliderサイトのオプション解説では、

startSlide
Starting slide index (zero-based)

と記載されており、画面上では「1」始まりの数字で表示して、startSlideオプションには「-1」して与えるべきであると考えました。

html

1<span id="curIndex">1</span><!-- 初期ページ番号 --> 2<ul class="bx_slider"> 3 <!-- foreach 画像があるだけ --> 4 <li class="img"> 5 <img src="img/hoge1.jpg"> 6 </li> 7 <li class="img"> 8 <img src="img/hoge2.jpg"> 9 </li> 10 <li class="img"> 11 <img src="img/hoge3.jpg"> 12 </li> 13 <!-- /foreach --> 14</ul>

として、

javascript

1 $(document).ready(function() { 2 var $img = $('.img'), pagemax = $img.length, 3 count = Number($("#curIndex").text());// ページ番号の変数 4 $('.bx_slider').bxSlider({ 5 startSlide : count - 1,//<{ページ番号の変数} -1/>, 6 pager : false, 7 captions : true, 8 onSlideNext : function() { 9 $('#curIndex').text(pagemax === count ? count = 1 : ++count); 10 }, 11 onSlidePrev : function() { 12 $('#curIndex').text(1 === count ? count = pagemax : --count); 13 } 14 }); 15 });

いかがでしょうか。

投稿2015/12/10 13:43

編集2015/12/10 13:46
blackonyx

総合スコア354

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

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

spring

2015/12/11 03:34 編集

ご回答ありがとうございます。 >見慣れないタグやコメントの表記 こちらすみません、タグに関してはオープンソースではない為、あの記述をしました。 HTMLの構成に関してご回答頂いたの通りとなっております。 ご回答いただいたscriptでやってみました! しかし、動作は変わらず読み込み後の画像が、実機(スマホ)で前の画像。 Chromeのエミュレーターで前の画像が出る時もあれば8枚前の画像等が表示されてしまいます。 ※Chromeのエミュレーターはiphone 6で検証。デバイスを横に引っ張れるようになっておりそれでサイズ(width)変更、引っ張ると正常にその画像が表示されます。 且つ実機の話で読み込み後左にスライドすると同じ画像、右にスライドすると1枚飛ばしになります。 ※その後は正常に動作する。
blackonyx

2015/12/11 03:49

かなりお困りのようですね。 さしあたり、問題が bxsliderにあるのか、はたまた > オープンソースでない 部分にあるのかの切り分けが必要みたいですね。 可能であれば、console.log()等で値の監視をしてみるとかどうでしょう。
spring

2015/12/11 04:44

ありがとうございます。 ご回答いただいたconsole.log()で確認しましたがカウント等は大丈夫そうでした。 デバックで確認した所、「draggable.js」という別にプラグインを使用しており、この処理内で画像がすり替わっている事が分かりました。 コンフリクトしないようにする方法を調べてみます。 ただ、、 ●テスト環境(script修正後) スマホ実機→問題が起きる。 Chromeエミュレータ→問題が起きる。 ●本番(script修正前) スマホ実機→問題が起きない。 Chromeエミュレータ→問題が起きる。 上記のような現象が起きており、コンフリクトが原因であるならば、本番のスマホ実機で問題が起きるはずですが起きていません。 訳が分からなくなってきました(泣
blackonyx

2015/12/11 04:55

問題の切り分けうまくいっているようですね。 コンフリクトは実際にあるようですし、次の対応は、コンフリクト解消か実機とエミュレータでの症状の現出の差異の原因究明かのどちらかに注力すべきと思いますが。
spring

2015/12/11 09:05

現在、コンフリクト解消後どうなるかやるべくやっております! 下記URLの「その3」を参考にやりましたがchromeエミュレータ,実機と確認した所、共に変化がありませんでした。 https://www.halawata.net/2011/10/jquery-noconflict/ すみません、何かおかしいところはありませんでしょうか? (function($) { $(document).ready(function() { var $img = $('.img'), pagemax = $img.length, count = Number($("#curIndex").text());// ページ番号の変数 $('.bx_slider').bxSlider({ startSlide : count - 1,//<{ページ番号の変数} -1/>, pager : false, captions : true, onSlideNext : function() { $('#curIndex').text(pagemax === count ? count = 1 : ++count); }, onSlidePrev : function() { $('#curIndex').text(1 === count ? count = pagemax : --count); } }); }); })(jQuery);
blackonyx

2015/12/11 10:19

このコンフリクト解消法は、「$===jQuery」以外の「$」を使用する別の体系からなるライブラリを併用する時に起こる、オブジェクト名の重複を回避するための用法で、実際に異なる体系のライブラリを使用していない場合、効果は薄いと思います。ローカルスコープ形成による効能はあるかもしれませんが。  それより、適用している効果やイベントリスナを切り分ける方法は可能でしょうか。
blackonyx

2015/12/11 10:21

イベントのバブリングについて疑ってみる価値はあると思いますが
spring

2015/12/14 03:40

すみません、ハブリングの件に関して下記サイトを参考にreturn false;で対応しようと修正しましたがやはり動作に変化がありませんでした。 http://www.tam-tam.co.jp/tipsnote/javascript/post5050.html $(document).ready(function() { var $img = $('.img'), pagemax = $img.length, count = Number($("#curIndex").text());// ページ番号の変数 $('.bx_slider').bxSlider({ startSlide : count - 1,//<{ページ番号の変数} -1/>, pager : false, captions : true, onSlideNext : function() { $('#curIndex').text(pagemax === count ? count = 1 : ++count); }, onSlidePrev : function() { $('#curIndex').text(1 === count ? count = pagemax : --count); } }); return false; }); 上記何か書き方等間違っていますでしょうか?
blackonyx

2015/12/14 07:59

return false; はイベントハンドラ内に記述してみて下さい。
blackonyx

2015/12/14 10:03

気になっているのですが、draggableは、どの要素に適用されていますか。そのあたりで発生するイベント処理について見てみては如何でしょうか。
spring

2015/12/15 03:14

>気になっているのですが、draggableは、どの要素に適用されていますか。そのあたりで >発生するイベント処理について見てみては如何でしょうか。 上記CromeのElementsを確認した所、draggableの記載が無く実装箇所を見つけられませんでした。※別名で呼び出しているのかもしれません。 こちらの件、別件でページ読み込み時に画像が一瞬大きく表示される問題がありまして読み込み後に画像を表示するようCSS修正をしましたところ、なぜか本件も解決しました。 下記参考URL http://hack.aipo.com/archives/5398/ 根本解決しておらず少し気持ち悪いですが一旦解決とさせていただきます。 また、違うページで本問題が起きた場合はイベントハンドラ内でのreturn false;をやってみます! 長い間お付き合い頂いて本当にありがとうございます。 とても助かりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問