目次
左の唇を作ります
数値を自動的に 1 ずつ増加させます
再生、一時停止、低速、中速、高速ボタンを追加
ホームページ ウェブフロントエンド jsチュートリアル CSS+JSでピカチュウアニメーションを作る方法(コード解析)

CSS+JSでピカチュウアニメーションを作る方法(コード解析)

Jul 19, 2021 pm 07:31 PM
css javascript アニメーション

この記事では、CSS JavaScript を使用してピカチュウをアニメーション化する方法を紹介し、CSS を使用してピカチュウを描画する方法と、js を使用してダイナミックな効果を実現し、ピカチュウを動かす方法も段階的に紹介します。

CSS+JSでピカチュウアニメーションを作る方法(コード解析)

# アイデアを記録するだけで、最適化できる部分がたくさんあります。

# 鼻 (扇形) を描きます

透明

を使用して適切な三角形を描きます<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>.nose { position: absolute; border: 10px solid black; border-color: black transparent transparent; border-bottom: none; left: 50%; top: 145px; margin-left: -10px; }</pre><div class="contentsignin">ログイン後にコピー</div></div>次に、その三角形上に半円を描いて扇形を形成します

.yuan {
  position: absolute;
  height: 8px;
  width: 20px;
  top: -18px;
  left: -10px;
  border-radius: 8px 8px 0 0;
  background-color: black;
}
ログイン後にコピー

黒い目を 2 つ描きます左右に

.eye {
  position: absolute;
  border: 2px solid #000000;
  width: 64px;
  height: 64px;
  left: 50%;
  top: 100px;
  margin-left: -32px;
  border-radius: 50%;
  background-color: #2e2e2e;
}
.eye.left {
  transform: translateX(-118px);
}
.eye.right {
  transform: translateX(118px);
}
ログイン後にコピー
黒目の中に白目を描きます

.eye::after {
  content: "";
  display: block;
  position: absolute;
  border: 2px solid black;
  background: #ffffff;
  width: 30px;
  height: 30px;
  border-radius: 50%;
  left: 10px;
}
ログイン後にコピー

唇を描きます

左の唇を作ります

.mouth .up .lip.left {
  border: 3px solid black;
  width: 86px;
  height: 24px;
  border-radius: 0 0 0 50px;
  border-top-color: transparent;
  border-right-color: transparent;
  position: relative;
  transform: rotate(-15deg);
  position: absolute;
  left: 50%;
  margin-left: -50%;
}
ログイン後にコピー

CSS+JSでピカチュウアニメーションを作る方法(コード解析)次に、擬似要素を使用して鼻の下の黒い縦線をカバーします

.mouth .up .lip.left::before {
  content: "";
  display: block;
  width: 5px;
  height: 30px;
  position: absolute;
  right: -4px;
  bottom: 0px;
  background-color: #ffdb00;
}
ログイン後にコピー

同じ原理で右の唇を作成します

.mouth .up .lip.right {
  border: 3px solid black;
  width: 86px;
  height: 24px;
  border-radius: 0 0 50px 0;
  border-top-color: transparent;
  border-left-color: transparent;
  position: relative;
  transform: rotate(15deg);
  position: absolute;
  right: 50%;
  margin-right: -50%;
}
ログイン後にコピー
.mouth .up .lip.right::before {
  content: "";
  display: block;
  width: 5px;
  height: 30px;
  position: absolute;
  left: -4px;
  bottom: 0px;
  background-color: #ffdb00;
}
ログイン後にコピー

CSS+JSでピカチュウアニメーションを作る方法(コード解析)下唇を作成します

.mouth .down {
  border: 1px solid red;
  height: 166px;
  width: 100%;
  position: relative;
  overflow: hidden;
}

.mouth .down .yuan1 {
  border: 1px solid black;
  position: absolute;
  width: 124px;
  height: 1000px;
  left: 50%;
  margin-left: -62px;
  bottom: 0;
  border-radius: 85px/280px;
  background: #9b000a;
}
ログイン後にコピー

##次に、ボディと同じ背景を .mouth .up .lip に追加します。 次に、内側と赤い頬を描画しますCSS+JSでピカチュウアニメーションを作る方法(コード解析)

.mouth .down .yuan1 .yuan2 {
  border: 1px solid red;
  position: absolute;
  width: 150px;
  height: 300px;
  background: #fa595b;
  left: 50%;
  margin-left: -75px;
  bottom: -165px;
  border-radius: 100px;
}

.face {
  border: 3px solid black;
  position: absolute;
  width: 88px;
  height: 88px;
  left: 50%;
  margin-left: -44px;
  top: 210px;
}
.face.left {
  transform: translateX(-166px);
  border-radius: 50%;
  background: #ff0000;
}
.face.right {
  transform: translateX(166px);
  border-radius: 50%;
  background: #ff0000;
}
ログイン後にコピー

アニメーション効果を追加します

鼻にアニメーション効果を追加します
@keyframes wave {
  0% {
    transform: rotate(0);
  }
  33% {
    transform: rotate(6deg);
  }
  66% {
    transform: rotate(-6deg);
  }
  100% {
    transform: rotate(0);
  }
}
.nose:hover {
  transform-origin: center bottom;
  animation: wave 220ms infinite linear;
}
ログイン後にコピー

ダイナミック表示

数値を自動的に 1 ずつ増加させます

新しい

test.html
    および
  • test.js# を作成します## in test.html で、demo の ID を持つ div を記述します
    let n = 1;
    demo.innerHTML = n;
    setInterval(() => {
      n += 1;
      demo.innerHTML = n;
    }, 1000);
    ログイン後にコピー
  • 下に 1 語ずつ段落を記述できます
  • const string = "大家好,我是你们的老朋友";
    let n = 1;
    demo.innerHTML = string.substr(0, n);
    setInterval(() => {
      n += 1;
      demo.innerHTML = string.substr(0, n);
    }, 300);
    ログイン後にコピー
  • ただし、まだバグがあります上記のコードで n と入力すると、単語が表示された後も n が増加し続けることがわかります。単語が表示されたらタイマーをキャンセルするだけです。タイマーのキャンセル方法は次のとおりです
const string = "大家好,我是你们的老朋友";
let n = 1;
demo.innerHTML = string.substr(0, n);
let id = setInterval(() => {
  n += 1;
  if (n > string.length) {
    window.clearInterval(id);
    return;
  }
  demo.innerHTML = string.substr(0, n);
}, 300);
ログイン後にコピー

一度に 1 つの単語を表示する原理がわかったので、次に CSS を表示します。

test.html 内に 2 つの div を用意します。1 つは CSS タグを記述するために使用され、もう 1 つはページに CSS コンテンツを表示するために使用されます。

しかし、これを実行してもまだ問題があり、表示されたアニメーションがテキストによって押し下げられます。 図に示すように、

次のコードを test.html

<style>
  #html {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 50vh;
  }
</style>
ログイン後にコピー
CSS+JSでピカチュウアニメーションを作る方法(コード解析) に追加します。アニメーション化する方法の問題は解決しましたが、コードが再び表示されなくなります。問題です。次に、スクロール バーを自動的に下にスクロールさせ、アニメーションを固定する方法を解決する必要があります。HTML のコンテンツはユーザーに表示される必要はありません。

<style>
  #demo2 {
    display: none;
  }
  #demo{
    position: fixed;
    height: 50vh;
    top: 0;
    left: 0;
    width: 100%;
    overflow-y: auto;
  }
  #html {
    position: absolute;
    bottom: 0;
    left: 0;
    width: 100%;
    height: 50vh;
  }
</style>
ログイン後にコピー

で直接非表示にすることができます。 test.js スクロール バーが自動的に下にスクロールするようにコードを更新します

let id = setInterval(() => {
  n += 1;
  if (n > string.length) {
    window.clearInterval(id);
    return;
  }
  demo.innerText = string.substr(0, n);
  demo2.innerHTML = string.substr(0, n);
  demo.scrollTop = demo.scrollHeight; //更新了这里
}, 0);
ログイン後にコピー

スクロール バーを非表示にしても、ユーザーは引き続きコンテンツをスクロールできます

#demo::-webkit-scrollbar {
  display: none; 
}
ログイン後にコピー

低速、中速、高速を実現します再生機能

再生、一時停止、低速、中速、高速ボタンを追加

    更新後、ボタンが最初に次のようになったことがわかりました。これは CSS リセットがボタンに影響するため、テストと js のコードを更新します
  • スタイルを 2 つの部分に分割し、相互に影響を及ぼさないようにします
  • .skin * {
      margin: 0;
      padding: 0;
      box-sizing: border-box;
    }
    .skin *::before,
    *::after {
      box-sizing: border-box;
    }
    .skin {
      background: #ffdb00;
      min-height: 50vh;
      position: relative;
    }
    ログイン後にコピー

3. アイデア

一時停止: タイマー (目覚まし時計) を消すCSS+JSでピカチュウアニメーションを作る方法(コード解析)

再生: タイマーを実行

ゆっくり: 目覚まし時計を壊して、リセットしてください。時間が遅くなります。
  • コードの最適化
  • btnSlow.onclick = () => {
      window.clearInterval(id);
      time = 300;
      id = setInterval(() => {
        run();
      }, time);
    };
    // 等价于
    btnSlow.onclick = () => {
      window.clearInterval(id);
      time = 300;
      id = setInterval(run, time);
    };
    ログイン後にコピー
  • 完全な最適化は次のとおりです。
暂停;
btnPause.onclick = () => {
  window.clearInterval(id);
};
播放;
btnPlay.onclick = () => {
  id = setInterval(() => {
    run();
  }, time);
};
慢速;
btnSlow.onclick = () => {
  window.clearInterval(id);
  time = 300;
  id = setInterval(() => {
    run();
  }, time);
};
中速;
btnNormal.onclick = () => {
  window.clearInterval(id);
  time = 50;
  id = setInterval(() => {
    run();
  }, time);
};
快速;
btnFast.onclick = () => {
  window.clearInterval(id);
  time = 0;
  id = setInterval(() => {
    run();
  }, time);
};
ログイン後にコピー

上記のコードの最適化結果は次のとおりです。
const run = () => {
  n += 1;
  if (n > string.length) {
    window.clearInterval(id);
    return;
  }
  demo.innerText = string.substr(0, n);
  demo2.innerHTML = string.substr(0, n);
  demo.scrollTop = demo.scrollHeight;
};

const play = () => {
  return setInterval(run, time);
};

let id = play();

const pause = () => {
  window.clearInterval(id);
};

//暂停
btnPause.onclick = () => {
  pause();
};
// 播放
btnPlay.onclick = () => {
  id = play();
};
//慢速
btnSlow.onclick = () => {
  pause();
  time = 300;
  id = play();
};
//中速
btnNormal.onclick = () => {
  pause();
  time = 50;
  id = play();
};
//快速
btnFast.onclick = () => {
  pause();
  time = 0;
  id = play();
};
ログイン後にコピー

関数が別の関数を呼び出すだけで何もしない場合、外部関数は直接省略できます。

例:

btnSlow.onclick = () => {
  slow();
};
//等价
btnSlow.onclick = slow;
ログイン後にコピー
複数の関数をまとめてブロックし、オブジェクトを指向させる

const play = () => {
  return setInterval(run, time);
};

let id = play();

const pause = () => {
  window.clearInterval(id);
};

const slow = () => {
  pause();
  time = 300;
  id = play();
};

const normal = () => {
  pause();
  time = 50;
  id = play();
};
const fast = () => {
  pause();
  time = 0;
  id = play();
};
ログイン後にコピー
const player = {
  run: () => {
    n += 1;
    if (n > string.length) {
      window.clearInterval(id);
      return;
    }
    demo.innerText = string.substr(0, n);
    demo2.innerHTML = string.substr(0, n);
    demo.scrollTop = demo.scrollHeight;
  },
  play: () => {
    return setInterval(player.run, time);
  },
  pause: () => {
    window.clearInterval(id);
  },

  slow: () => {
    player.pause();
    time = 300;
    id = player.play();
  },
  normal: () => {
    player.pause();
    time = 50;
    id = player.play();
  },
  fast: () => {
    player.pause();
    time = 0;
    id = player.play();
  },
};
ログイン後にコピー

....

  bindEvents: () => {
    document.querySelector("#btnPause").onclick = player.pause;
    document.querySelector("#btnPlay").onclick = player.play;
    document.querySelector("#btnSlow").onclick = player.slow;
    document.querySelector("#btnNormal").onclick = player.normal;
    document.querySelector("#btnFast").onclick = player.fast;
  }
  //
ログイン後にコピー
モジュール式

多数のコードを 1 つにまとめます。ファイルにエクスポートしてインポートします。

プログラミング関連の知識の詳細については、プログラミング ビデオ

をご覧ください。 !

以上がCSS+JSでピカチュウアニメーションを作る方法(コード解析)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

VueでBootstrapの使用方法 VueでBootstrapの使用方法 Apr 07, 2025 pm 11:33 PM

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

HTML、CSS、およびJavaScriptの役割:コアの責任 HTML、CSS、およびJavaScriptの役割:コアの責任 Apr 08, 2025 pm 07:05 PM

HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

ブートストラップにスプリットラインを書く方法 ブートストラップにスプリットラインを書く方法 Apr 07, 2025 pm 03:12 PM

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

HTML、CSS、およびJavaScriptの理解:初心者向けガイド HTML、CSS、およびJavaScriptの理解:初心者向けガイド Apr 12, 2025 am 12:02 AM

webdevelopmentReliesOnhtml、css、andjavascript:1)htmlStructuresContent、2)cssStylesit、および3)Javascriptaddsinteractivity、形成、

ブートストラップに写真を挿入する方法 ブートストラップに写真を挿入する方法 Apr 07, 2025 pm 03:30 PM

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

ブートストラップのフレームワークをセットアップする方法 ブートストラップのフレームワークをセットアップする方法 Apr 07, 2025 pm 03:27 PM

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップボタンの使用方法 ブートストラップボタンの使用方法 Apr 07, 2025 pm 03:09 PM

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します

ブートストラップのサイズを変更する方法 ブートストラップのサイズを変更する方法 Apr 07, 2025 pm 03:18 PM

Bootstrapの要素のサイズを調整するには、次のものを含むDimensionクラスを使用できます。

See all articles