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

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

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

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

Q&A

解決済

2回答

4856閲覧

ブレイクポイントでのJSの処理の切り替えについて

halwo

総合スコア11

jQuery

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

0グッド

1クリップ

投稿2018/09/28 06:43

前提・実現したいこと

レスポンシブサイトにおいて、bxSliderのmodeオプションをPC時とスマホ時で値を切り替えたいと思っています。現状ブレイクポイントで判定まではできているのですが、リロードをしないと発火しない状態から、ブレイクポイントの切り替えのときに、リアルタイムで発火させる状態にしたいと思っています。
setTimeOutを使ってできるのかと思ってはいるのですが、具体的な解決案がわかりません。
お力添えよろしくお願い申し上げます。

該当のソースコード

$(function() { //PCの場合 if (window.matchMedia( '(min-width: 769px)' ).matches) { $('.bxslider').bxSlider({ mode: 'vertical' }); //SPの場合 } else { $('.bxslider').bxSlider({ mode: 'horizontal' }); }; });

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

jQuery v1.12.4
bxSlider v4.2.12

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

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

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

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

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

guest

回答2

0

ベストアンサー

直接オプションをとる方法がないので.bx-cloneの状態を見て処理するのはどうでしょうか。
sliderには初回設定時のbxSliderが入っているものとして

jQuery

1$(function() { 2 var slider; 3 if (window.matchMedia('(min-width: 769px)').matches) { 4 // PCの場合 5 slider = $('.bxslider').bxSlider({ 6 mode: 'vertical' 7 }); 8 } else { 9 //SPの場合 10 slider = $('.bxslider').bxSlider({ 11 mode: 'horizontal' 12 }); 13 }; 14 15 $(window).on('resize', function(event) { 16 const float = $(slider.selector).find('.bx-clone').css('float'); 17 if (window.matchMedia('(min-width: 769px)').matches) { 18 if (float === 'left') { 19 slider.reloadSlider({ 20 mode: 'vertical' 21 }); 22 } 23 } else { 24 if (float === 'none') { 25 slider.reloadSlider({ 26 mode: 'horizontal' 27 }); 28 } 29 }; 30 }); 31});

(17:38修正)

投稿2018/09/28 08:02

編集2018/09/28 08:39
x_x

総合スコア13749

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

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

halwo

2018/09/28 08:33

ご回答ありがとうございます。大変申し訳ありません、これ以外の部分はどのようにしたらよいということでしょうか? 飲み込みが悪くすみません。
x_x

2018/09/28 08:36

変数sliderのところですかね? 提示コード中の呼び出しで var slider = $('.bxslider').bxSlider({}); とでも書けばOKです。
halwo

2018/09/28 08:52

ご回答ありがとうございます。別の不具合が発生したものの質問内容に関してはクリアできました。すみません、お聞きしても理解できないかもしれないのですが、直接オプションをとる方法がないというのはどういうことだったのでしょうか?
x_x

2018/09/28 09:06

現状設定されている'mode'の値を取りたかったけど取れなかったということです。
halwo

2018/09/28 09:18

それは今回のbxSliderのプログラムにおいて、そうだったという認識でよろしいのでしょうか。ありがとうございました。
guest

0

以下のような感じでイベントリスナーに張り付ける感じでしょうか
詳しくは以下をご覧ください。
参考サイト

js

1document.addEventListener('DOMContentLoaded', function () { 2 3 var mql = window.matchMedia('(min-width: 769px)'); 4 5 function touchBreakPoint(mql) { 6 if (mql.matches) { 7 $('.bxslider').bxSlider({ 8 mode: 'vertical' 9 }); 10 } else { 11 $('.bxslider').bxSlider({ 12 mode: 'horizontal' 13 }); 14 } 15 } 16 17 // ブレイクポイントで発火 18 mql.addListener(touchBreakPoint); 19 20 // 初回 21 touchBreakPoint(mql); 22});

投稿2018/09/28 07:03

mikan_s4n

総合スコア377

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

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

halwo

2018/09/28 07:27

ご回答ありがとうございました。まさにやりたいことは同じかと思うのですが、試したところウィンドウサイズを変更した後、リロードしないと発火しませんでした。
mikan_s4n

2018/09/28 07:58

念のために確認ですが、IE10以上のモダンブラウザですよね。モダンブラウザと仮定して考えれば回答のコードだとイベントリスナーの貼り付けが上手くいかず、ページ表示の初回のみ実行されている感じになりますかね…。 一応if-elseの中で console.log("Now vertical"); と console.log("Now horizontal");のようにログを仕込んで、サイズを変えた時にif-elseに到達してるかどうかのしてみてはいかがですか?確認はchrome等の開発者ツールで出来ますし、お手軽です。 その上で、window.matchMediaが動いていてbxSliderがコケてるのか といった具合に問題の切り分けをしていきましょう
halwo

2018/09/28 08:30

ご回答ありがとうございます。console.logを入れて確認したところブレイクポイントでログの判定は切り替わっておりました。bxSlider側のオプションが発火できていないようです。質問ですが、ブレイクポイントで一度だけ強制的にリロードするようにすることは可能でしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問