前言

封面大图仅供参考,请以实物为准。

你也曾经为 DVD 待机界面的图标刚好撞进屏幕角落兴奋过吗?

来看段视频回忆一下先。

免责声明

不是打算教 canvas,只是觉得好玩就简单看了一下。

意思就是做得略粗糙,别喷我。。

效果

帧数略低,实际当然流畅得多。

实现

HTML

<!DOCTYPE html>
<head><meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"><style>* {margin: 0;padding: 0;}body {background-color: lightblue;}#canvas {background-color: black;width: 100vw;}</style>
</head>
<body><canvas id="canvas"></canvas><script>/* 见下 */</script>
</body>
复制代码

JS

window.onload = function () {let// 画布ctx = document.getElementById('canvas').getContext('2d'),// 画布大小canvas_width = document.getElementById('canvas').width,canvas_height = document.getElementById('canvas').height,// DVD 图标的文本颜色、字体、背景色text_color = ['green', 'blue', 'purple', 'yellow', 'white', 'yellow', 'white'],text_font = 'italic bold 50px yahei',background_color = ['red', 'orange', 'yellow', 'green', 'blue', 'indigo', 'violet'],// 背景矩形的尺寸background_width = 110,background_height = 50,// 向矩形添加文本时,高度有点偏差fix_height = 7,// 速度,每次重绘移动 0.5 pxspeed_x = 0.5,speed_y = 0.5,// 移动方向,初始为 'r-b' 右下direction = 'r-b',// 图标 x 和 y 坐标,初始为 0position_x = 0,position_y = 0,// 碰撞次数,用来计算背景和文本颜色count = 0dvd()function dvd() {// 移动方向switch (direction) {// 右下case 'r-b':position_x += speed_xposition_y += speed_ybreak// 右上case 'r-t':position_x += speed_xposition_y -= speed_ybreak// 左下case 'l-b':position_x -= speed_xposition_y += speed_ybreak// 左上case 'l-t':position_x -= speed_xposition_y -= speed_ybreak}// 清空画布ctx.clearRect(0, 0, canvas_width, canvas_height)// 重绘ctx.fillRect(position_x, position_y, background_width, background_height)// 碰撞检测// 底if (position_y + background_height >= canvas_height) {direction = direction.replace('b', 't')// 碰撞次数统计count += 1}// 右if (position_x + background_width >= canvas_width) {direction = direction.replace('r', 'l')count += 1}// 左if (position_x < 0) {direction = direction.replace('l', 'r')count += 1}// 上if (position_y < 0) {direction = direction.replace('t', 'b')count += 1}// 文本ctx.font = text_fontctx.fillStyle = text_color[count % 7]ctx.fillText("DVD", position_x, position_y + background_height - fix_height)// 背景色ctx.fillStyle = background_color[count % 7]// 开始动画window.requestAnimationFrame(dvd)}
}
复制代码

用 canvas 做一个 DVD 待机动画相关推荐

  1. 用html做一个拍拍网界面视频,用canvas做一个DVD待机动画的实现代码

    免责声明 不是打算教 canvas,只是觉得好玩就简单看了一下. 意思就是做得略粗糙,别喷我.. 效果 帧数略低,实际当然流畅得多. 实现 HTML * {margin: 0;padding: 0;} ...

  2. android待机动画,Android 忆童年 DVD 待机动画(补档)

    image 周末逛「即刻」开到这个消息,然后心生一计,我可以自己做一个 DVD 的 loading效果啊. 什么?你不知道 DVD 是啥?呵呵,暴露年龄了.这是一个具有年代感的东西.你没看到过说明要么 ...

  3. Android 忆童年 DVD 待机动画

    周末逛「即刻」开到这个消息,然后心生一计,我可以自己做一个 DVD 的 loading效果啊. 什么?你不知道 DVD 是啥?呵呵,暴露年龄了.这是一个具有年代感的东西.你没看到过说明要么你年轻,年轻 ...

  4. 用three.js做一个新闻联播开头动画(一)

    一个好习惯,先给结论 最终效果如下: 在线体验地址:点我预览 代码地址:点我github 本文首发于:https://blog.gis1024.com/three_news_op_1.html 这里才 ...

  5. CSS/SCSS 做一个心跳的动画:keyframe

    CSS/SCSS 做一个心跳的动画 一.心电图数据化 做动画,需要动画曲线,心跳的曲线自然是心电图,网上随便找一个差不多的,选取完整的一部分 1. 横向10等分 找到基线,横向10等分. 整个图是一个 ...

  6. php 影院选座js代码,在react中用canvas做一个电影院选座功能

    又到了每日分享了.这次分享的是:在react中用canvas做一个电影院选座功能. 前言:项目采用create-react-app脚手架,就是做了一个效果所以只有一个页面但是也用了react-rout ...

  7. 使用HTML5的canvas做一个会动的时钟

    这次我们的目标是画一个会和时间同步的时钟,不过没有美学感觉,样子丑的厉害. HTML5支持canvas了,我们可以直接在页面上绘图了,我看了下canvas和GDI+的接口差不多,所以我们先了解些基本的 ...

  8. 用css3做一个求婚小动画

    概述 本案例主要是运用到了css3的animation.keyframes.transform等属性,熟悉了,就可以做更多的其他动画效果,这几个属性功能非常强大. 详细 代码下载:http://www ...

  9. 用js做一个鼠标惯性动画

    用js做一个简单的鼠标惯性动画 <style type="text/css">#div1{width: 50px;height: 50px;background: re ...

最新文章

  1. 与孩子一起学编程 python_【和孩子一起学编程】 python笔记--第五天
  2. 在cmd指令看计算机位数,在.cmd中使用Windows命令来测试32位或64位并运行命令
  3. GCC 编译时优化某一个或几个函数或者不优化某一个或几个函数
  4. 黄章爆料魅族16s/16s Plus更多信息 无线充电已做到24W
  5. 多模块Struts应用程序的几个问题(及部分解决方法)
  6. staticmethod自己定制
  7. libjingle源码解析(3)-【PseudoTcp】建立UDP之上的TCP(1):连接和关闭
  8. echarts legend属性_Vue 项目如何使用Echarts , 手摸手带你入门
  9. 解决ASP.NET 安装完成报错500
  10. sqlite3 error: database is locked
  11. python基础教程第4版pdf百度云-Python入门书籍电子版PDF百度云网盘免费下载
  12. 习惯的力量在于不由主——知道顶个球用,成为习惯才是你的
  13. python就业前景不好_Python就业发展前景分析
  14. ArcMAP 添加注记与编辑
  15. 华为机试真题 Python 实现【最短木板长度】【100%通过率】【2022.11 Q4 新题】
  16. 使用openpyxl进行多个excel数据合并
  17. 基于weixin-java-tools集成微信小程序支付功能
  18. 05-Spring反转控制IOC 与 依赖注入DI概念
  19. tlc5620输出三角波流程图_单片机实践A/D和D/A转换的程序
  20. 如何将图片转化成文字?常用的解决方法

热门文章

  1. python中flag的用法_python中flag什么意思
  2. 【老李的模拟赛】【#7】【2014-08-13】
  3. 微信公众号开通留言功能方法
  4. 画出含有四个节点的所有二叉树形态
  5. windows无法连接到打印机_打印机无法连接怎么办
  6. C# 路径 目录 文件操作办法
  7. JDBC(Java Data Base Connectivity)基本用法
  8. 红石外汇|每日汇评:黄金多头在美国CPI指数之前仍保持希望
  9. HarmonyOS——一个面向物联网的操作系统
  10. matlab 点顺时针排序,按顺时针顺序对点排序?