900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > 【canvas教程】绘制大图并实现画布拖动

【canvas教程】绘制大图并实现画布拖动

时间:2024-03-15 22:14:36

相关推荐

【canvas教程】绘制大图并实现画布拖动

效果展示:

实现代码:

<template><view><canvasid="gameCanvas"canvas-id="gameCanvas"disable-scrollstyle="width: 100vw;height: 100vh;"@touchstart="onTouchStart"@touchmove="onTouchMove"></canvas></view></template>

<script>import img from '@/static/images/demo.jpg';export default {canvasContext: null,data() {return {/** 是否正在绘制 */drawing: false,// 画布宽度width: 0,// 画布高度height: 0}},onReady() {const sys = uni.getSystemInfoSync();this.width = sys.screenWidth;this.height = sys.screenHeight;this.canvasContext = uni.createCanvasContext('gameCanvas');this.drawImg();},methods: {drawImg() {var ctx = this.canvasContext;// 改变坐标系原点ctx.translate(this.change.x, this.change.y);// 绘制图片ctx.drawImage(img, 0, 0, 1500, 1500);ctx.draw(false, () => {this.drawing = false});},onTouchStart(e) {this.start.x = e.touches[0].pageX;this.start.y = e.touches[0].pageY;},onTouchMove(e) {if(!this.drawing) { // 拦截频繁绘制this.drawing = true;let x = this.change.x + e.touches[0].pageX - this.start.x;let y = this.change.y + e.touches[0].pageY - this.start.y;// 限制 x、y 拖动范围,禁止滑出边界x = Math.min(Math.max(x, -1500 + this.width), 0);y = Math.min(Math.max(y, -1500 + this.height), 0);if(this.change.x !== x || this.change.y !== y) {this.change.x = x;this.change.y = y;this.drawImg();this.start.x = e.touches[0].pageX;this.start.y = e.touches[0].pageY;} else {this.drawing = false;}}}}}</script>

其他说明:

1.如使用 ts 语法,在 import 图片时遇 `Cannot find module...` 错误,可在 `*.d.ts` 文件中添加 `declare module '*.jpg';`

2.示例代码是基于uniapp 框架实现。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。