Kros的博客 Kros的博客
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云

Kros

凡心所向,素履以往,生如逆旅,一苇以航
首页
  • CSS
  • 工具
  • Vue
  • js
  • Vue3
  • 算法
  • 折腾笔记
一言
  • 分类
  • 标签
  • 归档
码云
  • 拼图小游戏

    • 拼图思路总览
    • 拆分图片
    • 拆分图片打乱顺序
    • 拖动拆分的图片
    • 拖动图片到原图上
    • 优化重构项目
    • 问题与总结
  • 井字棋

  • 贪吃蛇

  • 扫雷

  • 项目
  • 拼图小游戏
kros
2020-11-23

问题与总结

基于vue的拼图小游戏制作完成,在编写的途中遇到许多知识点和问题,在最后做一个总结避免忘记

# 使用canvas时,刷新页面有时会显示不出图片

原因:img标签尚未加载完成,使用img的onload事件即可

imgBase.onload = () => {
	canvas.drawImage(imgBase, 0, 0, width, width, 0, 0, 300, 300);
	...
}
1
2
3
4

# 优化canvas频繁读取

在获取getContext时添加参数willReadFrequently,可以优化后续读取操作。详见文档

document.getElementById('imageFac').getContext('2d', { willReadFrequently: true });
1

# 获取图片实际宽高

绘制图片时我们需要根据图片的实际宽高完全绘制到canvas上,所有需要获取图片的实际宽高。这里借助另一个image元素,当不给img设置宽高是默认为原始图片宽高,利用这点就可以获取到图片实际宽高。需要注意的是宽高需要在图片加载完成后的onload事件中获取。

getImgWidth (imgSrc) {
  var image = new Image();
  image.src = imgSrc;
  return new Promise((resolve, reject) => {
    image.onload = () => {
      resolve(image.width)
    }
    image.onerror = function () {
      reject(0);
    };
  })
}
// 获取宽度
(async () => {
  let width = await this.getImgWidth('')
})()
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
上次更新: 2025/09/05, 8:09:00
优化重构项目
简介

← 优化重构项目 简介→

最近更新
01
Find the next perfect square
09-05
02
Regex validate PIN code
09-05
03
Find the odd int
09-05
更多文章>
Theme by Vdoing | Copyright © 2020-2025 kros king
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
icon-heart-o icon-heart icon-infinity icon-pause icon-play link next prev