文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

HarmonyOS 自定义JS组件之画板组件

2024-12-02 18:53

关注

想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

前言

随着科技的发达,在日常生活中我们逐渐的脱离的笔和纸,但往往还有许多场景我们还是需要涂涂画画,不论是开会或者设计等等刚好身边没有笔纸,我们的画板就排上用场了。我们还可以扩展将其作为和键盘鼠标一样的输入设备等等。还有更多的使用场景让我们一起探索。

功能介绍

画板组件是基于HarmonyOS下的JavaScript UI框架开发的一款组件,主要特点如下:

  1. 支持画笔粗细选择
  2. 支持画笔颜色定义选中
  3. 画笔颜色除了默认颜色,可点击色盘,选择自己想要的颜色
  4. 一键清除画板
  5. 支持橡皮擦功能
  6. 支持保存图片功能

注意:

组件使用说明

  1. name="drawing-board" src="../../common/component/drawingBoard.hml"
  2. "getUrl"
  3.  
  4. // 获取图片信息,可以根据自己的图片组件需要,处理对应的base64 数据 
  5. getUrl(valueUrl){ 
  6.     console.log('得到图片信息'+JSON.stringify(valueUrl)); // "data:image/png;base64,xxxxxxxx..." 

主要代码

组件传值

  1. // 可以根据自己的实际情况,传入需要的画笔颜色和画笔大小 
  2. props: { 
  3. // 画笔粗细 
  4. brushSizes: { 
  5.     type: Array, 
  6.     default: [3,8,16] 
  7. }, 
  8. // 画笔颜色 
  9. brushColor: { 
  10.     type: Array, 
  11.     default: ['#ffffff',"#000000","#ff9800",'#3f51b5','#ff5722',"#4caf50"

初始化画布

  1. initCanvas(){ 
  2.        this.canvas = this.$refs.canvas; 
  3.        this.canvasTxt = this.canvas.getContext('2d',{ antialias: true }); 
  4.        this.canvasTxt.strokeStyle = this.signColor; 
  5.        this.canvasTxt.lineJoin = "round"
  6.        this.canvasTxt.lineCap = "round"
  7.        this.canvasTxt.globalCompositeOperation = this.penType; 
  8.        this.canvasTxt.lineWidth = this.lineWidth; 
  9.    } 

设置画板工具

  1. setTool(item,index) { 
  2.        console.log(index); 
  3.        if(index == 0 || index == 1){ 
  4.            this.toolOn = index
  5.        } 
  6.        let type = item.type; 
  7.        switch(type){ 
  8.            case 1: 
  9.                // 画笔 
  10.                this.penType = 'source-over'
  11.                this.canvasTxt.lineWidth = this.lineWidth; 
  12.                this.canvasTxt.globalCompositeOperation = this.penType; 
  13.                break; 
  14.            case 2: 
  15.               // 橡皮檫 
  16.                this.penType = 'destination-out'
  17.                this.canvasTxt.lineWidth = this.lineWidth; 
  18.                this.canvasTxt.globalCompositeOperation = this.penType; 
  19.                break; 
  20.            case 3: 
  21.                this.overwrite(); 
  22.                break; 
  23.            case 4: 
  24.                // 保存 
  25.                this.savaCanvas(); 
  26.                break; 
  27.        } 
  28.    }, 

画笔颜色选择

  1. selectColor(color,index) { 
  2.     this.colorOn = index
  3.     this.signColor = color; 
  4.     this.canvasTxt.fillStyle = this.signColor; 
  5.     this.canvasTxt.strokeStyle = this.signColor; 
  6.     this.canvasTxt.lineWidth = this.lineWidth; 
  7. }, 

画笔粗细设置

  1. selectSize(size,index) { 
  2.         this.sizeOn = index
  3.         this.lineWidth = size
  4.         this.canvasTxt.lineWidth = this.lineWidth; 
  5.     }, 

开始画线

  1. drawLine(beginPoint, controlPoint, endPoint) { 
  2.   this.canvasTxt.beginPath(); 
  3.   this.canvasTxt.moveTo(beginPoint.x, beginPoint.y); 
  4.   this.canvasTxt.quadraticCurveTo( 
  5.       controlPoint.x, 
  6.       controlPoint.y, 
  7.       endPoint.x, 
  8.       endPoint.y 
  9.   ); 
  10.   this.canvasTxt.stroke(); 
  11.   this.canvasTxt.closePath(); 
  12. }, 

一键清除功能

  1. overwrite() { 
  2.   this.canvasTxt.clearRect(0, 0, 1920,1920); 
  3.   this.points = []; 
  4.   this.isDraw = false; //画板标记 
  5. }, 

保存功能

  1. savaCanvas(){ 
  2.     var dataURL = this.$refs.canvas.toDataURL(); 
  3.     // 保存画板的到的是base64信息 
  4.     this.$emit('eventDataurl',dataURL) 

效果演示


想了解更多内容,请访问:

51CTO和华为官方合作共建的鸿蒙技术社区

https://harmonyos.51cto.com

 

来源:鸿蒙社区内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯