開発ガイダンス - CSS アニメーションを使用して HarmonyOS の動的効果を実装する (2)

注: この記事の内容は、HarmonyOS Developer 公式 Web サイトのドキュメントから共有および転載されています。

「開発ガイド―CSSアニメーションを使ってHarmonyOSのモーション効果を実現する(1)」をご覧ください

3. 背景位置スタイルのアニメーション

背景画像の位置を変更するには、background-position プロパティを変更します (最初の値は X 軸の位置、2 番目の値は Y 軸の位置です)。背景画像の位置がコンポーネントを超える場合は、を選択すると、背景画像の余分な部分は表示されません。

<!-- xxx.hml --><div class="container">  <div class="content"></div>  <div class="content1"></div></div>

/* xxx.css */.container {
   
     height: 100%;  background-color:#F1F3F5;  display: flex;  flex-direction: column;  justify-content: center;  align-items: center;  width: 100%;}.content{
   
     width: 400px;  height: 400px;  /* 不建议图片长宽比为1:1 */  background-image: url('common/images/bg-tv.jpg');  background-size: 100%;  background-repeat: no-repeat;  animation: change 3s infinite;  border: 1px solid black;}.content1{
   
     margin-top:50px;  width: 400px;  height: 400px;  background-image: url('common/images/bg-tv.jpg');  background-size: 50%;  background-repeat: no-repeat;  animation: change1 5s infinite;  border: 1px solid black;}/* 背景图片移动出组件 */@keyframes change{
   
     0%{
   
       background-position:0px top;  }  25%{
   
       background-position:400px top;  }  50%{
   
       background-position:0px top;  }  75%{
   
       background-position:0px bottom;  }  100%{
   
       background-position:0px top;  }}/* 背景图片在组件内移动 */@keyframes change1{
   
     0%{
   
       background-position:left top;  }  25%{
   
       background-position:50% 50%;  }  50%{
   
       background-position:right bottom;  }  100%{
   
       background-position:left top;;  }}

説明する

背景位置は背景画像の移動のみをサポートしますが、背景色はサポートしません。

4.SVGアニメーション

SVG コンポーネントにアニメーション効果を追加します。

プロパティスタイルのアニメーション

Svg のサブコンポーネントanimateで、attributeName を通じてアニメーション化する必要がある属性を設定し、from を通じて開始値を設定し、to を通じて終了値を設定します。

<!-- xxx.hml --><div class="container">  <svg>    <text x="300" y="300" fill="blue">      Hello      <animate attributeName="font-size" from="30" to="60" dur="3s" repeatCount="indefinite">      </animate>      <animate attributeName="fill" from="red" to="blue" dur="3s" repeatCount="indefinite">      </animate>      <animate attributeName="opacity" from="1" to="0.3" dur="3s" repeatCount="indefinite">      </animate>    </text>    <text x="300" y="600" fill="blue">      World      <animate attributeName="font-size" from="30" to="60" values="30;80" dur="3s" repeatCount="indefinite">      </animate>      <animate attributeName="fill" from="red" to="blue"  dur="3s" repeatCount="indefinite">      </animate>      <animate attributeName="opacity" from="0.3" to="1" dur="3s" repeatCount="indefinite">      </animate>    </text>  </svg></div>

説明する

アニメーション変更値を設定する際、values属性が設定されている場合、from、toともに無効となります。

パスアニメーション

Svg のサブコンポーネントanimateMotionに、アニメーション変更のパスを path で設定します。

<!-- xxx.hml --><div class="container">  <svg fill="white" width="800" height="900">    <path d="M300,200 h-150 a150 150 0 1 0 150 -150 z" fill="white" stroke="blue" stroke-width="5" >    </path>    <path fill="red" d="M-5,-5 L10,0 L-5,5 L0,0 Z"  >      <animateMotion dur="2000" repeatCount="indefinite" rotate="auto-reverse"path="M300,200 h-150 a150 150 0 1 0 150 -150 z">      </animateMotion>    </path>  </svg></div>

animate変形アニメーション

Svg サブコンポーネントanimateTransformでは、attributeName を介して変換属性をバインドし、type はアニメーション タイプを設定し、from は開始値を設定し、to は終了値を設定します。

<!-- xxx.hml --><div class="container" style="">    <svg>        <line x1="90" y1="300" x2="90" y2="730" stroke-width="10" stroke="black" stroke-linecap="round">            <animateTransform attributeName="transform" attributeType="XML" type="translate"  dur="3s" values="0;30;10;30;20;30;25;30" keyTimes="0;0.3;0.5;0.7;0.8;0.9;1.0;1.1"                              fill="freeze">            </animateTransform>        </line>        <circle cx="500" cy="500" r="50" stroke-width="15" fill="red" stroke="#e70d0d">            <animateTransform attributeName="transform" attributeType="XML" type="rotate"  dur="3s" values="0;30;10;30;20;30;25;30" keyTimes="0;0.3;0.5;0.7;0.8;0.9;1.0;1.1" fill="freeze">            </animateTransform>            <animateTransform attributeName="transform" attributeType="XML" type="scale"  dur="6s" values="1;1;1.3" keyTimes="0;0.5;1" fill="freeze"></animateTransform>            <animateTransform attributeName="transform" attributeType="XML" type="translate"  dur="9s" values="0;0;300 7" keyTimes="0;0.6;0.9" fill="freeze"></animateTransform>        </circle>        <line x1="650" y1="300" x2="650" y2="600" stroke-width="20" stroke="blue" stroke-linecap="round">            <animateTransform attributeName="transform" attributeType="XML" type="translate"  dur="9s" values="0;0;0 800" keyTimes="0;0.6;1" fill="freeze"></animateTransform>        </line>    </svg></div>

/* xxx.css */.container {
   
     flex-direction: column;  align-items: center;  width: 100%;  height: 100%;  background-color: #F1F3F5;}

おすすめ

転載: blog.csdn.net/HarmonyOSDev/article/details/132670565