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

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

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

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

Q&A

解決済

1回答

5430閲覧

animateのstep関数で使われるnowとは

退会済みユーザー

退会済みユーザー

総合スコア0

jQueryプラグイン

jQueryの拡張機能。 様々な種類があり、その数は膨大です。公開済みのプラグインの他にも、自作することもできます。 jQueryで利用できるようにしておくだけで、導入およびカスタマイズが比較的容易に行なえます。

jQuery

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

0グッド

0クリップ

投稿2015/02/06 02:06

こんにちわ。
jqueryのanimateででてくる、step関数の引数nowが
良く分からなくて困っています。

具体的には下記URLの「clipを使用したアニメーション」のjsの記述を
理解できずに困っています。
http://wood-roots.com/web%E5%88%B6%E4%BD%9C/jqueryjavascript/clip%E3%81%A8borderwidth%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%9F%E6%9E%A0%E7%B7%9A%E3%81%8C%E9%A3%9F%E3%81%84%E8%BE%BC%E3%82%93%E3%81%A7%E3%81%8F%E3%82%8B%E3%82%88%E3%81%86%E3%81%AA%E3%82%A2

下記コードにて、[fx:10]が、nowの中に入っている…?
nowは「現在のアニメーション状態のプロパティ値」とありますが、
よくわからなくて、挙動を理解できずにます。

lang

1$('.clipanim').on('mouseenter',function(){ 2 $(this).stop(true,true).animate({ 3 fx: 10 4 },{ 5 duration: 400, 6 step: function(now,fx){ 7 $(this).css({ 8 //上下左右10pxずつ切り抜く 9 clip: 'rect('+now+'px '+($(this).width()-now)+'px '+($(this).height()-now)+'px '+now+'px)' 10 }); 11 } 12 });

もし宜しければ、ご解説頂けると幸いです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

 分からなくなった時には公式のドキュメントを参照するといいですよ!

Step Function
The second version of .animate() provides a step option — a callback function that is fired at each step of the animation. This function is useful for enabling custom animation types or altering the animation as it is occurring. It accepts two arguments (now and fx), and this is set to the DOM element being animated.
now: the numeric value of the property being animated at each step
fx: a reference to the jQuery.fx prototype object, which contains a number of properties such as elem for the animated element, start and end for the first and last value of the animated property, respectively, and prop for the property being animated.

.animate() | jQuery API Documentation

ということですから、step関数はアニメーションのそれぞれのステップで呼び出される関数で、引数のnowはそのステップ時において変化させる値の数値です。
この場合、fx(というダミー値)を400ミリ秒で0から20に変化させているわけですから、nowは0から20のその時点でのどこかの値が入っていることになります。



もう少し説明をします。
簡単のために1ミリ秒を1ステップとして0から20に変化させるアニメーションだとします。

1ミリ秒目
nowには1が入ってますから

lang

1clip: 'rect('+now+'px '+($(this).width()-now)+'px '+($(this).height()-now)+'px '+now+'px)'

 は以下のようになります。

lang

1clip: 'rect(1px '+($(this).width()-1)+'px '+($(this).height()-1)+'px 1px)'

 
2ミリ秒目
nowには2が入ってますから

lang

1clip: 'rect('+now+'px '+($(this).width()-now)+'px '+($(this).height()-now)+'px '+now+'px)'

 は以下のようになります。

lang

1clip: 'rect(2px '+($(this).width()-2)+'px '+($(this).height()-2)+'px 2px)'

 
...

20ミリ秒目
nowには20が入ってますから最終的には以下のようになります。

lang

1clip: 'rect(20px '+($(this).width()-20)+'px '+($(this).height()-20)+'px 20px)'

 
実際には、jQuery.fx.interval のデフォルト値が13なので、duration が400ですから、1ステップ目の now は 20*13/400=.65 ぐらいになるんじゃないかと思います。確かめてないですが。




余談ですが、clip: inset を利用した方がすっきりしそうなんですが、それを使ってないのは上手く動かないからなんでしょうかね……?

投稿2015/02/06 04:25

Lhankor_Mhy

総合スコア36115

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

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

退会済みユーザー

退会済みユーザー

2015/02/06 10:43

とても丁寧なご解説ありがとうございました! nowの「現在のアニメーション状態のプロパティ値」という言い回しに理解することができ、 無事動かすことができました。 clip:insetは初めて見かけましたので、書き換えてみたのですが、 どうも挙動が不思議に(マウスアウト時にclipされる)なりましたが、 inset部に関しては正常に動きました。 自力で挙動を正常にしようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問