博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
用 canvas 做一个 DVD 待机动画
阅读量:7071 次
发布时间:2019-06-28

本文共 2307 字,大约阅读时间需要 7 分钟。

前言

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

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

来看段回忆一下先。

免责声明

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

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

效果

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

实现

HTML

  
复制代码

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 px    speed_x = 0.5,    speed_y = 0.5,    // 移动方向,初始为 'r-b' 右下    direction = 'r-b',    // 图标 x 和 y 坐标,初始为 0    position_x = 0,    position_y = 0,    // 碰撞次数,用来计算背景和文本颜色    count = 0  dvd()  function dvd() {    // 移动方向    switch (direction) {      // 右下      case 'r-b':        position_x += speed_x        position_y += speed_y        break      // 右上      case 'r-t':        position_x += speed_x        position_y -= speed_y        break      // 左下      case 'l-b':        position_x -= speed_x        position_y += speed_y        break      // 左上      case 'l-t':        position_x -= speed_x        position_y -= speed_y        break    }    // 清空画布    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_font    ctx.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)  }}复制代码

转载地址:http://krell.baihongyu.com/

你可能感兴趣的文章
五分钟学习 Java 8 行为参数化
查看>>
Elasticsearch の 初体验|一文了解她
查看>>
聊聊flink的Triggers
查看>>
自建最轻量的react+webpack+es6架构
查看>>
聊聊reactor extra的retry
查看>>
reactor-netty中HttpClient对TcpClient的封装
查看>>
数据库安全性操作——操作原则及SQL注入
查看>>
Java网络爬虫实操(9)
查看>>
前面有一个Redux,我们去撩(聊)一下它。
查看>>
iOS开发证书"此证书的签发者无效"解决方法
查看>>
Python实现的通用树结构,支持节点索引,常数时间查找
查看>>
网络传输协议
查看>>
iOS Principle:Category
查看>>
Java多线程之synchronized增强版——ReentrantLock
查看>>
MVP设计模式应该这样掌握
查看>>
Git标签的管理和配置命令别名
查看>>
对UIView,UIWindow和CALayer的理解
查看>>
使用javap分析Java的字符串操作
查看>>
Node.js-Koa2-MongoDB构建RESTful Api
查看>>
饿了么UETool原理初探
查看>>