React Springはアニメーションであなたを助けることができます。これは、Web上で実装するのに無名なトリッキーです。 CSSアニメーション 最良の選択ですが、スムーズな結果を生み出すには、クラス、期限、イベントの慎重なジャグリングが必要です。 thr JavaScriptフレームワーク ミックスに反応するように、さらに物事をさらに複雑にします。
ユーザーの対話に依存するアニメーションの場合、値はJavaScriptを通じて計算し、要素に直接要素に適用できます。このマニュアルアプローチを取ることで、アニメーションをより自然に見せるために私たち自身の緩和を計算して適用する必要があります。
湧き立てた Web上でアニメーションになると、多くの共通ハングアップを処理するように構築されたライブラリです。まっすぐな期間にわたって物理学に焦点を当て、そして緩和機能を定義することによって、わずかに異なるアプローチが必要です。これは物事を滑らかで自然に感じさせるのに役立ちます。
これが視覚効果に使用されるほとんどの場合、その値がスタイルに使用されるかどうかにかかわらず、ライブラリは2つの値の間で移行します。たとえば、コミュニティが大きい方を強調するために、数多くのサインアップをカウントアップするために使用できます。
このチュートリアルでは、ユーザーが画像を評価できるようにするカードコンポーネントを作成します。カードは星評価を明らかにするためにフリップし、ユーザーは自分自身を追加するためにクリックすることができます。反応バージョン16.8以上が必要なReact Springの新しいフックの実装を使用します。始める前に、 ここでチュートリアルファイルをダウンロードしてください (そしてそれらを上に戻してください クラウドストレージ )。
複雑なコードプロセスなしでサイトを構築したい場合は、まともなものを使用してください ウェブサイトビルダー 。そして探索するようにしてください ウェブホスティング オプションもあります。
ダウンロードされたファイルでは、開始する前にパッケージの依存関係をインストールする必要があります。これにより、React Appベースのプロジェクトが含まれています 反応春 パッケージとすべての必要なローカルサーバーが開始されるのに必要なすべてのローカルサーバー。
コマンドラインで、プロジェクトファイルを見つけてインストールしてから実行します。
&gt。糸
>ヤーンスタート
まず、数量の画像が必要です。このチュートリアルでは、アプリケーションの状態にいくつかの画像をハードコーディングすることになりますが、このデータはどのソースからも発生する可能性があります。 App.jsを開き、それらの画像をいくつか作成します 織物 反応からのフック。これにより、各イメージに初期評価が表示され、後で表示して更新できるようになります。
const [カード] = USESTATE([
CreateImage(Image1)、
CreateImage(Image2)、
CreateImage(image3)
])
画像がアレイに格納されると、その状態をループオーバーしてそれぞれに別々のコンポーネントを作成できます。 React Springのアニメーションロジックは内側に住んでいます <評価貨物/ gt; 私たちが必要としているどこにでも使用できるコンポーネント。
App.jsのレンダリングメソッド内で、状態配列内の各カードに対してそのコンポーネントのコピーを作成します。それは、画像や初期評価を含む状態のすべての値を受け取ります。
{cards.map((カード、索引)=>(
< RatingScard key = {index} {...カード} / gt;
))}
アニメーションを追加する前に、カードにはいくつかのコンテンツが必要です。各カードには前後があり、それは別々に実装されています < div> 要素は互いの上に階層化されています。
開いた RatingsCard / Index.js カードの構造を追加します。最終的に評価を含むバックで、画像をバックグラウンドとして適用する必要があります。
divクラス名= "RatingScard"&Gt。
<
classname = "RatingsCard__Front"
style = {{{{{{
BackgroundImage: `URL($ {image})`
}}}
/ gt;
アニメーションを通じて直接更新されないスタイルは、CSSを介して適用できます。これには、オーバーオーバーしたときの各カードの基本的な3Dシャドウ効果が含まれます。内部 RatingsCard / Style.css. フィルタを適用することで、カードをホバー上のページから飛び出すようにするためにいくつかの追加のスタイルを追加します。
.RatingScard:Hover {
フィルタ:ドロップシャドウ(0 14px 28px.
RGBA(0,0,0,0.25))
ドロップシャドウ(0 10px 10px.
RGBA(0,0,0,0.1))。
ホバーの突然の影は渋滞の経験です。したがって、物事を滑らかに保つために州の間でゆっくりと移行するはずです。ホバリングされていない場合は、カードのサブテラードロップシャドウを追加します。使用 遷移 これら2つの状態の間でアニメートするプロパティ。
.RatingScard {
[...]
フィルタ:ドロップシャドウ(0 3px 6px.
RGBA(0,0,0,0.16))
ドロップシャドウ(0 3px 6px.
RGBA(0,0,0,0.1))。
遷移:フィルタ0.5S;
カードのどちら側を向いているかについての情報を保存して更新する必要があります。 Reactの内蔵を使用できます 織物 開始値を定義し、それを更新する方法とメソッドを返します。
の開始時に 評価カード コンポーネント機能、これを定義します selected 状態。
const [選択、設定された設定]
= USESTATE(FALSE)
React Springは、1つの値と別の値との間の数値を遷移させる責任があります。これは春とそれを使って行うことができます 使用済み 針。セットアップ情報を提供しており、その物理計算に従って更新される一連の値を返します。
フリップアニメーション用のスプリングを作成します。これは、カードがその中にあるかどうかに応じてカードをフェードして回転させます。 selected 状態。
const {不透明度、変換}
= usepring({
不透明度:選択しましたか? 1:0、
変換: `Rotatey(
$ {選択? 180:0}°) `
});
によって返されたオブジェクト 使用済み アニメーションを定義しますが、必要な数値を指定しないでください。 the アニメーション ファクトリ機能この情報を消化してから、値として値をコンポーネントに供給します。
変換する 評価カード を使用する要素 アニメーション 関数。 the animated.div. 構文は、Aを返す機能を指示します < div> 。
< animated.div classname = "RatingScard"≫
< animated.div.
classname = "RatingsCard__Front"
style = {{{{{{
BackgroundImage: `URL($ {image})`
}}}
/ gt;
< animated.div classname =
"RatingsCard__バック" / gt;
< / Animated.Div>
React Springは値をアニメート化していて、要素自体のアニメーションはありません。これらの値をスタイルの小道具にリンクしてそのアニメーションをその場で作成することができます。新規を利用するためにフロントカードを更新する 不透明度 そして 変わる 値。この場合、私たちはすぐに対処する不透明度の値を補間する必要があります。
< animated.div.
classname = "RatingsCard__Front"
style = {{{{{{
BackgroundImage: `URL($ {image})`、
不透明度:Opacity.Interpolate(
逆働き)、
変わる
}}}
/ gt;
カードを弾くとき、私たちが一方の顔に適用されるアニメーションはどんなものでも逆に適用する必要があります。一緒にプレーされたとき、彼らは1つの部分として動いているように見えます。
この場合、同じスタイルをバックカードに適用する必要がありますが、今回は 変わる 代わりに値。
< animated.div.
classname = "ratingscard__back"
style = {{{{{{
不透明度、
変換:変換
.Interpolate(InverSecransform)
}}}
/ gt;
値をCSSプロパティに直接適用する代わりに、それらの値を別のものにマッピングするために、それらにある種の関数を適用することができます。このプロセスは補間と呼ばれます。
の上部に向かっていくつかの補間関数を定義する RatingsCard / Index.js 。これらは、選択または選択解除するときに、アニキシティと変換アニメーションの両方の逆を適用します。
const inversepacity = o = gt。 1 - O;
const enverSetransform = t =>
`$ {t} Rotatey(180deg);
カードの反転はクリックに結び付けられるべきです。のように selected State Valueどの顔が表示されているかを決定します。カードをクリックすると、その状態を切り替えます。
アウターにクリックリスナーを追加します 評価カード 素子。これが起こると、状態で保持されているブール値を切り替えます。
< animated.div.
classname = "RatingsCard"
onclick = {()= = gt;
setSelected(!選択)}
>
今、私たちのアニメーションはうまくいきますが、それはフリップよりも浮き上がっているようです。それがどのように動作するかを変更するために、各スプリングでいくつかの値を変更することができます。 Springのセットアップオブジェクト内には、 config 摩擦を減らし、張力を増加させるための物体。これにより、アニメーションにスナッパの感触が与えられます。
jusspring({
config:{
摩擦:22、
張力:500
}、
[...]
});
以前のCSS-Power Hoverの影響はいくらかのフィードバックを提供しているが、カーソル位置に反応する傾斜アニメーションを有することによってさらにそれをさらに強めることができる。マウスの移動などの高周波でスプリングを更新するときは、を使用して優れたパフォーマンスを向上させることができます。 セットする 各スプリングによって返される関数。このアニメーションのための新しいスプリングを作成し、返された機能を保持してください。
const [props、set] = usingpring(()=>({
状態:[0,0,1]
}
));
React Springは、配列を含むさまざまな種類の値をアニメートできます。 1つのアレイに値を保存することで、それらをすべて補間することができます。 変わる ワンパスのプロパティ。
Aを作成する 翻訳 補間機能とメインにスタイルを適用します 評価カード 素子。
const変換Card =(x、y、scale)=>
`視点(1000px)Rotatex($ {x} deg)
Rotatey($ {y} deg)スケール($ {スケール}) `;
[...]
< animated.div.
classname = "RatingsCard"
onclick = {()= = gt; SetSelected(!選択)}
style = {{変換:!選択&&
Props.State.Interpolate(
TransformCard)}}}}
マウスイベントはその時点でカーソルの座標を提供します。ビューポート内でカーソル位置を取得するには、クライアント座標に興味があります。マウスの移動を追加して、アウターにイベントを残します < div> 。カーソルが残っているときに移動時の関数に座標を渡し、デフォルト値にリセットされます。 < div> 。
onmouseleave = {()= gt;セットする({
状態:[0,0,1]})}
OnMouseMove = {({clientx:x、
クライアント:y})=>セットする({
状態:計算値(x、y)})
ユーザーがそれと対話すると、カードがあまり動いすぎるのを避けるために小さな傾きを望むだけです。 the 計算値 関数はカーソルが点灯してその方向に向かってそれを傾けるスクリーンの側面を作動させます。
これらの値を記入する機能を作成します。 40で割ることで、より使いやすくするためにチルト効果が少なくなります。最終値は、画面からカードを視覚的に上げます。
const calculatevalues =(x、y)= gt。 【
- (y - window.innerheight / 2)/ 40、
(x - window.innerwidth / 2)/ 40、
1.1]
各画像には、カードの裏面に星に表示する必要がある評価があります。このロジックはそれ自身のコンポーネント内に保持されていますが、最初に背面に適用する必要があります。
まず、評価を保持するために新しい状態を作成し、次にaを作成します。 <星座> 裏面の内側のコンポーネント < div> 。
const [電流設定、設定]
= USESTATE(評価);
[...]
{選択&& (
< Starrating Rating = {currant}
setrating = {setrating} / gt;
カードが反転したら、スターの評価はフェードインします。を使用することによって usetrail. 反応春からのフック、私達は次々に複数の部品にスプリングを塗布することができます。
open Starrating / Index.js. そしてフックを追加します。最初の引数は、作るスプリング数を定義します。
Const AnimatedStars = USETRAIL(5、{
config:{
摩擦:22、
張力:500
}、
から:{不透明度:0、
変換: "スケール(0.8)"}、
不透明度:1、
変換: "スケール(1)"
});
私たちがする必要がある最後のことは、実際にそれらの星を展示することです。 the アニメーションスタール 変数には、繰り返し、カードに適用できるスプリングの配列が含まれています。
各星のために、ANを示す
<アニメーションスター>
メインの内側のコンポーネント
星座
div。各コンポーネントにすべての効果を適用するためのスタイルの小道具を広げてください。クリックしたら、新しい評価を親に送信します
{AnimatedStars.MAP((小道具、索引)=>(
<アニメーションスター
active = {Index + 1< =評価}
onclick = {E => {
E.StopPropagation()。
設定(Index + 1);
}}}
key = {index}
style = {... props}}
/ gt;
))}
この記事はもともとCreative Web Design Magazineで公開されました ウェブデザイナー 。 問題288を購入する または 申し込む 。
続きを読む:
クライアントは常にオーディエンスとの関わりの新しい方法を探しています。 Snapchat GeoFilters - 特別なコミュニケーションオーバーレイ - 特�..
あなたの強制的な間に 3Dモデル 骨を使用することは非常に効果的であり得、時にはその方法は適切ではないことがあり�..