RailsでTubolinksをオンにしてjQueryを使用する場合、通常通りの記述ではreadyが動かないということがわかったため、その対策を記入しました。
それによってTubolinksをオフにせずともいくつかのjsファイルはうまく動作したのですが、以下の2機能についてはreadyがうまく発火していないようで、ページを再読み込みしないと動作しません。
今回実装したい機能は以下の2点です。
1.「#fixMenu」の固定
2.「.MenuBody」の表示切り替え
まず1.について。
javascript
1var ready; 2ready = function() { 3 4$(document).ready(function() { 5 var nav = $('#fixMenu'), 6 offset = nav.offset(); 7 8 $(window).scroll(function () { 9 if($(window).scrollTop() > offset.top - 20) { 10 nav.addClass('fixed'); 11 } else { 12 nav.removeClass('fixed'); 13 } 14 }); 15}); 16 17 }; 18$(document).ready(ready); 19$(document).on('page:load', ready);
上記の記述でreadyの対策はできているかと思うのですが、ページ遷移後にはうまく動作せず、「Uncaught TypeError: Cannot read property 'top' of undefined」とエラーが出てしまいます。
また、2について、
javascript
1var ready; 2ready = function() { 3 $(function() { 4 $('.toggleMenu').click(function() { 5 if ($('.MenuBody').css('display') == 'block') { 6 $('.MenuBody').fadeOut('800'); 7 }else{ 8 $('.MenuBody').slideDown('1000','swing'); 9 10 } 11 }); 12 $('.toggleMenu,.MenuBody').hover(function(){ 13 over_flag = true; 14 }, function(){ 15 over_flag = false; 16 }); 17 $('body').click(function() { 18 if (over_flag == false) { 19 $('.MenuBody').fadeOut('800'); 20 21 } 22 }); 23 }); 24}; 25$(document).ready(ready); 26$(document).on('page:load', ready);
こちらも同様に、ページ遷移後はうまく動作せず、再読み込みすればうまく動作します。
ページ遷移後は、「.MenuBody」は上から降りてはくるのですが、降りてくると同時にフェードアウトして消えてしまいます。
おそらく「.hover」の発火がうまくいってないのではないかと思いますが、「Uncaught ReferenceError: over_flag is not defined」というエラーが出ています。
jquery.turbolinksを使用しても同様の結果でした。
どのようにすればこれらのjQueryを正常動作させることができるでしょうか。
ご回答よろしくお願いいたします。
- について、hello-world様から頂いた以下の回答で動作しました。
Javascript
1 2(function(){ 3 var offset; 4 5 $(window).scroll(function () { 6 var nav = $('#fixMenu'); 7 if(offset && $(window).scrollTop() > offset.top - 20) { 8 nav.addClass('fixed'); 9 } else { 10 nav.removeClass('fixed'); 11 } 12 }); 13 14 $(document).on('ready page:load', function(){ 15 offset = $('#fixMenu').offset(); 16 }) 17})();
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/08/08 05:56
2015/08/08 13:30
2015/08/10 01:03
2015/08/10 01:31
2015/08/10 01:50
2015/08/10 02:16
2015/08/10 03:08
2015/08/10 04:07
2015/08/10 04:49 編集
2015/08/10 06:51
2015/08/10 07:50