当前位置: 代码网 > it编程>编程语言>Javascript > uniapp中实现canvas超出屏幕滚动查看功能

uniapp中实现canvas超出屏幕滚动查看功能

2024年05月15日 Javascript 我要评论
亲爱的小伙伴,当你需要在uniapp中使用canvas绘制一个超长图,就类似于横向的流程图时,这个canvas超出屏幕部分拖动屏幕查看会变得十分棘手。我查阅了大量资料,甚至是问了无数遍ai,得到的结果

亲爱的小伙伴,当你需要在uniapp中使用canvas绘制一个超长图,就类似于横向的流程图时,这个canvas超出屏幕部分拖动屏幕查看会变得十分棘手。我查阅了大量资料,甚至是问了无数遍ai,得到的结果只有很敷衍的监听touch,然后计算偏移量,然后重绘。可是,你想想,如果一次绘图里边有成百上千个元素,还有很大的图片,你重绘?那不得卡死。终于,在一次询问ai时给了我一丝曙光,并且实践告诉我,这个方法绝对管用!

1.使用scroll-view嵌套canvas,官网是说不许嵌套的,但是我们可以另辟蹊径,滚动的关键就再这个ontouchmove方法中

<scroll-view ref="scrollview" scroll-x scroll-y style="height: 100vh;" @touchmove="ontouchmove">
			<canvas canvas-id="mycanvas" id="mycanvas" @tap="handlecanvastap" ref="mycanvas"
				style="width: 5000rpx; height: 200vh"></canvas>
		</scroll-view>

2.定义参数

data(){
    retrun{
        	startx: 0,
				starty: 0,
				offsetx: 0,
				offsety: 0,
				context: null,
				endx: 0,
				endy: 0,
				ismoving: false,
    }
}

3.关键方法

ontouchmove(e){
    				if (this.ismoving) {
					const deltax = e.touches[0].clientx - this.startx;
					const deltay = e.touches[0].clienty - this.starty;
					const query = uni.createselectorquery().in(this);
					query.select('#mycanvas').boundingclientrect().exec((res) => {
						const canvas = res[0].node;
						canvas.style.transform = `translate(${deltax}px, ${deltay}px)`;
					});
					this.endx = e.touches[0].clientx;
					this.endy = e.touches[0].clienty;
				}
}

4.你的canvas属性要跟的我一致,包你成功!

到此这篇关于uniapp中实现canvas超出屏幕滚动查看的文章就介绍到这了,更多相关uniapp canvas滚动查看内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

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

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com