JQueryスライドショー「bxSlider」のオプションにrandomStartを使って最初に表示させる画像をランダムにしたいのですがうまくいきません。
4枚の画像を2枚ずつカルーセルで表示し、更新するたびに最初に表示される画像をランダムに変えたいのですが、特定の画像ばかり多く表示されます。表示される確率を均一にしたい場合はどうしたらいいでしょうか?
---jQuery-------------------
$(document).ready(function(){
$('#slider3').bxSlider({
auto: true,
randomStart: true,
touchEnabled: false,
pause: 4000,
speed: 500,
minSlides: 2,//最低限表示させる数
maxSlides: 2,//一度に表示させる数
moveSlides: 2,//スライドで動かす数
slideWidth: 180,
slideMargin: 2
});
});
---HTML -------------------
<ul id="slider3" class="slider">
<li class="slide1"><a href="◯" target="_blank" class="thumb"><img src="../img/◯/◯.jpg" alt="◯"></a></li>
<li class="slide2"><a href="◯" target="_blank" class="thumb"><img src="../img/◯/◯.jpg" alt="◯"></a></li>
<li class="slide3"><a href="◯" target="_blank" class="thumb"><img src="../img/◯/◯" alt="◯"></a></li>
<li class="slide4"><a href="◯" target="_blank" class="thumb"><img src="../img/◯/◯.gif" alt="◯"></a></li>
</ul>
記入しているソースは以上です。
class="slide3"と class="slide4"の画像組み合わせが10回更新中8回ぐらいでます。
最初に表示される画像の確率を同じにする場合はどうしたらいいのでしょうか?
どうぞよろしくお願いします。
No.3ベストアンサー
- 回答日時:
#1、2です。
ちょっと時間ができたので、試してみました。
確かに、なんかおかしいですね。
少しテストしてみましたが、#1のようにstartSlideを指定しても同様の事象がおきるようです。
表示されているslide番号を取得してみると、こちらがslideのインデックスのつもりのものがpagerのインデックスとして解釈されているようです。
勝手な想像では、1枚表示のスライダーを想定していて、複数枚表示のケースを考慮し忘れている様にも見受けられます。
(1枚表示の場合は、pagerとslideのインデックスは一致するので正常になる)
randomStartの内部処理では、予想通りslide数のインデックスをランダムに発生しているようですが、表示処理の中でこれがpagerのインデックスとして使われてしまっているようです。(未確認)
それなので、ご質問のケースではslide番号0では(slide1、slide2)が表示され、1~3では(slide3、slide4)が表示されてしまうようです。
しかも、2、3の場合は対応するpageがないので、位置の表示(濃くなる)がされないものと思われます。
(全部の処理を追いかけてはいないので、半分は想像ですが・・・)
この結果として、slide番号はランダムに発生しているものの、page0が25%、page1が75%の割合で表示されることになってしまうようで、ご質問の内容と割合もほぼ符号しますね。
・・・ということで、多分、作者さんが複数枚表示の場合をうっかりしたのではないかと考えたのですが・・・
作者の以下のサンプルをよく見ると、7枚目のslideを表示するのにstartSlide:2の指定をしていますので、pagerの指定であることは意図的なようにも見受けられます。
(説明でslideとpageを使い分けているので、それならオプション項目名をstartPageとでもしておくべきだと思いますが・・・)
http://bxslider.com/examples/carousel-demystifie …
それはそれとして、とりあえずの対処方法としては・・・
1)#1の方法で、startSlideにpagerのインデックス(ご質問のケースでは 0 or 1 )を指定する。
2)randomStartの処理で発生する番号を表示枚数で除して、pagerのインデックスに相当するようにしておく。
などが考えられます。
全体を解読してはいないので、少々いい加減ですが、2)の方法としては142行目あたりの
Math.random() * slider.children.length
↓ ↓ ↓
Math.random() * slider.children.length / slider.settings.maxSlides
とする感じです。
ちょっと小手先の調整なので、根本的に修正するほうが好ましいですが、ライブラリ全部を読解しないとならないので・・・
まぁ、上記1)の方法(=#1の回答の方法)の方が、安全と言えば安全かも。
No.2
- 回答日時:
#1です。
>2つともの丸が薄いままの時があります。2つとも薄い時が多く
ページャーは表示位置を示しているはずなので、全てが薄いというのはおかしくありませんか?
サンプルのデモで見る限り、きちんと位置を示すように機能している様に見えますが・・・
http://bxslider.com/examples/carousel-demystified
http://bxslider.com/examples/carousel-dynamic-nu …
どこかで矛盾した初期設定になっているようなことはないでしょうか?
(あるいは、まさかとは思いますがバグなのか・・・)
No.1
- 回答日時:
bxSliderの内部を確認してはいませんが、想像では普通に乱数を利用して初期値を決めているのだと思いますので、ご質問の結果はたまたまの偶然ではないのでしょうか?
どうしてもライブラリの制御がお気に召さないようであれば、スタート画像を指定するオプションもあるようですのでそちらを利用することにして、ご自分で初期表示の画像を決めて指定すれば宜しいのではないでしょうか?
自分で発生させるのであれば、ランダムに限らず、好みの比率で発生させるようなことも可能です。
var rateGenerator = function(ratio){
var i, rdm, sum = 0, r = [], n = ratio.length;
for(i = 0; i < n; i++){ sum += ratio[i]; r[i] = sum; }
rdm = Math.random() * sum;
for(i = 0; i < n; i++) if(rdm < r[i]) break;
return i;
}
//0~3を5:4:3:2の比率で発生させる
var r = rateGenerator([ 50, 40 , 30, 20 ]);
回答ありがとうございます。
画像下にあるページャーの丸が2つならんでいるのですが、左右どちらかが濃い丸になる時と、2つともの丸が薄いままの時があります。2つとも薄い時が多く、その時はclass="slide3"と class="slide4"の組み合わせが表示されるのですが、何か関係があると思われますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Slick.jsのオプションrtlについて
-
MAX関数を使ってからLEFT JOIN...
-
jQueryでサーバー上のファイル...
-
createElementで作成した要素を...
-
折りたたみ部分にアンカーでリ...
-
Gifアニメ、最後のコマに行った...
-
Javascript初心者|jQueryの.va...
-
ボタンを押すたびに交互に切り...
-
文字を固定したいのですが…
-
c++std::string型をTCHARに変換...
-
lightbox2をiframeから外に表示...
-
【java】背景画像を一定時間で...
-
removeAttribute()メソッドで削...
-
クリックすると隠れたテキスト...
-
スワップイメージが上手く動作...
-
jQueryで同じクラス名のものを...
-
クリックで色変更後に既に変更...
-
javascript テキストエリアを1...
-
表示・非表示のスクリプトで、...
-
eclipseでcssを使うためには?
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Slick.jsのオプションrtlについて
-
fontsize.jsでhtmlの大中小の設...
-
横並びの画像を3枚時間差でフェ...
-
javascript 神経衰弱 表に返...
-
アコーディオンメニューが開い...
-
jcarouselliteについてです。
-
複数の要素へ appendchild でき...
-
キャラクターがぴょこんと飛び...
-
【jQuery】2分割レイアウトで、...
-
jQuery bxSlider でのアニメー...
-
Dreamweaver上とデバイスプレビ...
-
オンマウスで画像変更、クリッ...
-
複数のJavascript の組込み方に...
-
Javascriptを使用したスライド...
-
jCarousel Lite スタート位置
-
CSSでマウスオーバーした画像を...
-
ドロップダウンメニューの方法...
-
文字サイズ変更のjavascriptが...
-
Javaスクリプトで画像を縦にス...
-
Jqueryを使ったHTMLの操作
おすすめ情報