CSS+JS如何制作皮卡丘动画(代码分析)

本篇文章给大家介绍一下css+javascript制作皮卡丘动画的方法,会一步步给大家介绍使用css如何绘制皮卡丘,如何使用js实现动态效果,让皮卡丘动起来。

CSS+JS如何制作皮卡丘动画(代码分析)

简单记录一下思路,有非常多可以优化的地方

画鼻子(一个扇形)

利用 transparent画出合适的三角形

.nose {  position: absolute;  border: 10px solid black;  border-color: black transparent transparent;  border-bottom: none;  left: 50%;  top: 145px;  margin-left: -10px;}

再画出三角形上面的半圆共同组成扇形

立即学习“前端免费学习笔记(深入)”;

.yuan {  position: absolute;  height: 8px;  width: 20px;  top: -18px;  left: -10px;  border-radius: 8px 8px 0 0;  background-color: black;}

画左右两个黑眼睛

.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;}

画嘴唇

制作左边 lip

.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%;}

2.png

然后用伪元素遮住鼻子下方的黑色竖线

.mouth .up .lip.left::before {  content: "";  display: block;  width: 5px;  height: 30px;  position: absolute;  right: -4px;  bottom: 0px;  background-color: #ffdb00;}

同样原理制作右 lip

.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;}

3.png

制作下嘴唇

.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;}

4.png

然后在 .mouth .up .lip 中 加入和 body 一样的背景然后画里面的部分和红脸颊

.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.htmltest.js在 test.html 中写一个 id 为 demo 的 div

let n = 1;demo.innerHTML = n;setInterval(() => {  n += 1;  demo.innerHTML = n;}, 1000);

下面就可以写一段话,一个字一个字的出现

const string = "大家好,我是你们的老朋友";let n = 1;demo.innerHTML = string.substr(0, n);setInterval(() => {  n += 1;  demo.innerHTML = string.substr(0, n);}, 300);

但是上面代码还存在 bug ,打出 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);

知道了一个字一个字显示的原理,接下来显示我们的 CSS。

test.html 中准备两个 div ,一个用来写 CSS 标签,一个用来将 CSS 内容显示在页面上。

卡拉OK视频制作 卡拉OK视频制作

卡拉OK视频制作,在几分钟内制作出你的卡拉OK视频

卡拉OK视频制作 178 查看详情 卡拉OK视频制作

但是,这样之后还是有一个有问题,显示的动画被文字顶下去了。如图所示

5.png

在 test.html 中加入下面代码

  #html {    position: absolute;    bottom: 0;    left: 0;    width: 100%;    height: 50vh;  }

我们解决了如何让动画的问题,又出现了代码看不见的问题,接下来解决怎么让滚动条自动往下滚,并且动画固定不动

html 的内容是不需要被用户看见的,可以直接隐藏

  #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;  }

在 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 reset 影响到按钮,在 test,js 中更新代码

将样式分为两块,互不影响

.skin * {  margin: 0;  padding: 0;  box-sizing: border-box;}.skin *::before,*::after {  box-sizing: border-box;}.skin {  background: #ffdb00;  min-height: 50vh;  position: relative;}

6.png

3.思路

暂停:清除计时器(闹钟)播放:运行计时器慢速:砸了闹钟,重新设一个,时间更慢

代码优化

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;  }  //

模块化

把一堆代码放到一个文件里导出,在导入

更多编程相关知识,请访问:编程视频!!

以上就是CSS+JS如何制作皮卡丘动画(代码分析)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/563696.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月10日 02:22:10
下一篇 2025年11月10日 02:22:52

相关推荐

  • PHP怎样处理Opcache优化 PHP性能优化之Opcache配置指南

    opcache通过缓存预编译php脚本提升应用性能,关键配置包括:1.启用opcache(opcache.enable=1);2.设置足够内存(建议128mb起步);3.优化字符串缓冲区(8-16mb);4.调整最大缓存文件数;5.生产环境关闭时间戳验证(opcache.validate_times…

    2025年12月11日 好文分享
    000
  • 配置PHPCMS的站群动态域名的详细步骤

    phpcms站群动态域名配置通过服务器重写规则与系统站点管理结合实现。1. 服务器配置:nginx中设置主站点与子站点的server块,利用泛域名或通配符匹配所有子站请求并转发至phpcms入口文件;2. phpcms后台配置:在“站点管理”中添加站点并绑定对应域名,配置站点信息后更新缓存确保生效;…

    2025年12月11日 好文分享
    000
  • 为PHPCMS编辑器添加代码高亮显示功能

    要为phpcms编辑器添加代码高亮显示功能,1. 引入前端高亮库prism.js或highlight.js;2. 下载并放置prism.css和prism.js文件至项目目录;3. 修改ueditor配置以支持插入符合要求的html结构;4. 在前端模板中正确引入css与js文件并初始化;5. 确保…

    2025年12月11日 好文分享
    000
  • PhpStorm的代码分析和静态检查功能使用

    phpstorm 的代码分析和静态检查功能能有效提升代码质量。1. 启用并配置代码检查,通过设置选择需要的检查规则并设定严重级别;2. 使用类型提示提高分析准确性,帮助 phpstorm 更精准识别变量类型;3. 利用“意图操作”快捷键快速修复问题,如添加命名空间或初始化变量;4. 配合外部工具如 …

    2025年12月11日 好文分享
    000
  • 优化PHPCMS网站数据的存储和管理

    phpcms网站数据优化需从数据库调优、缓存机制和内容生命周期管理三方面系统性推进。1. 数据库层面,对v9_news、v9_content等核心表的catid、inputtime、status字段建立合适索引,使用复合索引提升查询效率;2. 将数据库引擎迁移至innodb以支持行级锁和事务,定期执…

    2025年12月11日 好文分享
    000
  • 在PHPCMS编辑器中添加视频和音频的方法

    1.插入视频音频主要用内置工具或外部代码;2.显示问题多因标签过滤、flash兼容或路径错误;3.响应式显示可用css容器控制宽高比;4.优化建议用第三方平台或cdn并启用懒加载。在phpcms中插入多媒体内容主要有两种方式:使用编辑器自带的“插入/编辑多媒体”功能上传本地文件或填写在线资源url,…

    2025年12月11日 好文分享
    000
  • 解决PHPCMS插件更新后功能失效的问题

    phpcms插件更新后功能失效,通常是因为缓存未清除、文件覆盖不彻底、数据库结构未同步或php版本不兼容。解决方法如下:1. 清除缓存,包括后台操作和手动清理caches目录内容;2. 检查文件完整性,使用对比工具合并配置文件而非直接覆盖;3. 执行数据库升级脚本或手动检查表结构;4. 查看错误日志…

    2025年12月11日 好文分享
    000
  • 如何生成验证码?GD库图形处理教程

    生成验证码的核心在于服务器端图像处理技术,常用php的gd库实现。其步骤包括:1.创建画布并定义尺寸;2.分配背景、文字及干扰颜色;3.生成随机字符并存入session;4.绘制文字(可用imagettftext增加自然扭曲);5.添加干扰元素如点、线;6.输出图片并销毁资源。传统验证码仍有价值在于…

    2025年12月11日 好文分享
    000
  • WooCommerce:在单品页自定义显示特定商品属性

    本教程旨在指导您如何在WooCommerce单品页面上自定义显示特定的商品属性。通过使用WordPress的add_action钩子和WooCommerce提供的产品数据方法,您可以灵活地选择并展示诸如尺寸、颜色等关键属性,从而提升用户体验和产品信息清晰度。文章将提供详细的代码示例和实现步骤,帮助您…

    2025年12月11日
    000
  • 在WooCommerce单品页面显示特定产品属性

    本教程旨在指导您如何在WooCommerce单品页面上显示特定的产品属性。通过使用WordPress的add_action钩子和WooCommerce提供的产品数据方法,您可以编写自定义PHP代码来获取并展示选定的产品属性(如尺寸、颜色等),从而增强产品信息的清晰度和用户体验。文章将详细解释代码逻辑…

    2025年12月11日
    000
  • WooCommerce教程:在单品页灵活展示指定产品属性

    本教程详细介绍了如何在WooCommerce单品页面上,通过自定义PHP函数和WordPress的Action Hook机制,灵活地展示多个指定的产品属性。文章将提供具体的代码示例,并指导您如何添加、修改和优化属性的显示,确保产品信息清晰呈现,提升用户体验。 在woocommerce中,产品属性是描…

    2025年12月11日
    000
  • 调整PHPCMS的缓存设置以提升网站速度

    调整phpcms缓存设置是提升网站速度最直接且高效的手段。1. 开启html静态化:在后台“系统设置”->“站点管理”中勾选“全站静态化”,发布内容时选择生成静态页,显著降低服务器负载;2. 数据缓存类型选择:默认使用文件缓存,适用于中小型网站;高并发场景建议使用memcache或redis,…

    2025年12月11日 好文分享
    000
  • 解决PHPCMS编辑器文字排版错乱的问题

    解决phpcms编辑器文字排版错乱的问题,核心在于“净化”内容并优化编辑流程。1. 最直接的方法是使用“粘贴为纯文本”功能,剥离外部样式后再重新排版;2. 若内容已粘贴错乱,可使用“清除格式”按钮去除多余内联样式;3. 对于顽固问题,进入html源代码视图手动删除冗余的span、div标签及特殊字符…

    2025年12月11日 好文分享
    000
  • 优化PHPCMS安装环境以提高性能

    php版本选择对phpcms性能影响显著,较新的稳定版本(如php 7.x或8.x)能提升执行效率、降低资源消耗并增强安全性;升级前需充分测试兼容性。其次,mysql配置应调整innodb_buffer_pool_size至内存50%-80%,启用查询缓存并优化索引,以提高数据库性能。最后,使用cd…

    2025年12月11日 好文分享
    000
  • 为PHPCMS网站添加在线客服插件的方法

    为phpcms网站添加在线客服功能的核心方法是集成第三方客服系统的javascript代码。具体步骤包括:1.选择合适的在线客服服务商,如智齿客服、美洽等;2.注册并获取提供的嵌入式javascript代码;3.登录phpcms后台,进入模板管理,找到页脚footer.html或头部header.h…

    好文分享 2025年12月11日
    000
  • 处理PHPMyAdmin操作数据库时的网络延迟问题

    phpmyadmin操作数据库的网络延迟问题通常由客户端网络、服务器性能和数据库查询共同导致。首先,检查客户端网络是否稳定,使用ping或traceroute排查延迟或丢包;其次,优化服务器配置,包括mysql的innodb_buffer_pool_size、max_connections,以及ph…

    2025年12月11日 好文分享
    000
  • 解决 Laravel 项目在共享主机上链接失效的 404 错误

    本教程旨在解决 Laravel 项目部署到共享主机(如 000webhost)后,内部链接出现 404 错误的问题。核心解决方案是通过在网站根目录配置 .htaccess 文件,确保服务器正确重写 URL 并将所有请求导向 Laravel 的 index.php 前端控制器,从而恢复路由功能。 理解…

    2025年12月11日
    000
  • 解决Laravel项目在共享主机上链接失效的404问题

    本文旨在解决Laravel应用部署到共享主机(如000webhost)后,内部链接出现404错误的问题。核心解决方案是配置一个正确的.htaccess文件,以确保服务器能够正确处理Laravel的URL重写规则,将所有请求路由到index.php前端控制器,从而使路由和链接功能正常运作。 问题背景与…

    2025年12月11日
    000
  • 解决PHPCMS插件安装后出现冲突的问题

    phpcms插件冲突的解决方法包括以下步骤:1. 立即禁用问题插件,通过后台或手动重命名文件夹实现;2. 检查php和web服务器错误日志以定位具体问题;3. 排查文件覆盖、数据库冲突、钩子冲突和前端资源冲突等类型;4. 进行隔离测试,逐个启用插件以确定冲突源;5. 查看插件代码识别潜在问题。常见冲…

    2025年12月11日 好文分享
    000
  • 如何在通用JS文件中为不存在的对象添加事件监听器

    本文旨在解决在通用JavaScript文件中,由于被不同PHP文件加载,导致部分PHP文件中不存在特定DOM元素时,addEventListener尝试在NULL对象上注册事件监听器的问题。通过简单的条件判断,可以避免在不存在的元素上添加事件监听器,从而防止JavaScript错误。 在开发Web应…

    2025年12月11日
    000

发表回复

登录后才能评论
关注微信