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

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

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

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

Q&A

解決済

2回答

1749閲覧

animate中の処理

T.I

総合スコア17

jQuery

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

0グッド

1クリップ

投稿2016/11/11 02:00

とあるシステムで、メニューの開閉を改修しています。
現在は、クリック連打対応としてフラグを用意し、
animate開始時にフラグON、animate完了時にフラグOFFにすることで
連打を回避しましたが、テストの際に上がってきた要望として
「アニメーション処理が80%進んだ時点でクリックを受け付ける」
ようにしてほしいということでした。
animateに秒数を指定し、setTimeOutでフラグOFFすることで
出来るかと思いテストしましたが、うまく動きません。
(クリックした時点でOFFになっていました)
どなたか解決方法よろしくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

オプションのstepを使うといいと思いますね。

HTML

1<button>clickMe</button> 2<div></div> 3<span></span>

javascript

1var flag=true; 2$('button').on('click',e=>{ 3 if (flag) { 4 $('div').stop().css({width:0}); 5 $('div').animate({width:100},{ 6 duration:5000, 7 step: (now, fx)=>{ 8 $('span').text(now); 9 if (now>80&&!flag) console.log(flag=true) 10 } 11 }) 12 flag = false; 13 } 14});

https://jsfiddle.net/5hd24and/

投稿2016/11/11 03:50

Lhankor_Mhy

総合スコア36115

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

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

Lhankor_Mhy

2016/11/11 03:51

あら、現行のコード見てませんでした。失礼。
T.I

2016/11/11 06:33

上記コードとサンプルの動作を基に改修して使用させていただきました。 回答ありがとうございました。
guest

0

具体的なanimate処理のトリガーと実行を例示してください
またスピードはミリ秒単位で指示してください

#追記
以下、一定時間waitをかけるサンプルを提示します。
わかりやすいようにトリガーになるdivに色をつけてあります。
赤いボタンを押すと水色に変わり水色の間はボタンを押せません。
一定時間立つと水色から赤に戻ります。
speed(ミリ秒)とratio(経過した比率)でスピードは調整してください

HTML

1<style type="text/css"> 2#button { 3 float: left; 4 background-color: red; 5 height: 50px; 6 width: 50px; 7} 8#ani { 9 float: left; 10 background-color: silver; 11 height: 50px; 12 width: 500px; 13} 14</style> 15<script src="js/jquery.js"></script> <!--ライブラリは適当に--> 16<script> 17$(function(){ 18 var speed=1000; 19 var ratio=0.8; 20 var flg=true; 21 $('#button').on('click',function(){ 22 if(flg==false) return false; 23 $.when( 24 setTimeout(function(){ 25 $('#ani').animate( { width: 'toggle',}, { duration: speed, easing: 'swing', } ); 26 $('#button').css({"background-Color":"aqua"}); 27 flg=false; 28 },0), 29 wait(speed*ratio)) 30 .done( 31 function(){ 32 flg=true; 33 $('#button').css({"background-Color":"red"}) 34 } 35 ) 36 }); 37}); 38function wait(speed) { 39 var d = $.Deferred(); 40 setTimeout(function(){d.resolve();}, speed); 41 return d.promise(); 42} 43</script> 44<div id="button"></div> 45<div id="ani" style="display: block;"></div> 46<div style="clear: both;"></div> 47

ただしanimateが終わる前にwait処理が終わるので
徐々にボタンが押せるタイミングが速くなってきます
仕様は悩みどころですね・・・

投稿2016/11/11 02:32

編集2016/11/11 03:27
yambejp

総合スコア114843

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

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

T.I

2016/11/11 03:02

現行の、クリック連打対応した処理が以下になります。 var gMenuFlg = 0; var gMenu = function(){ WindowHeight = $(window).height(); $('#gMenuWrapper').css('height', WindowHeight - '10'); $(function(){ $('#gMenu').on('click', function(){ if (!gMenuFlg){ gMenuFlg = 1; $('#gMenuWrapper').animate({width:'toggle'}, {complete:function(){gMenuFlg = 0;}}); $(this).toggleClass('gMenuOpen').toggleClass('gMenuClose'); } }); }); }; 開閉スピードは1000ミリ秒にする予定です。
yambejp

2016/11/11 03:28

一応サンプルをつけておきます ただし仕様が微妙ですね・・・
T.I

2016/11/11 06:36

今回は、Lhankor_Mhyさんの案を使用させていただきました。 yambejpさんに投稿いただいたサンプルも、動作させてみて 今後使用させていただくことがあるかと思います。 投稿ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問