微信小程序开发:canvas 多行文字换行

简介: 微信小程序开发:canvas 多行文字换行

微信小程序开发中,canvas画出一篇文章,由于句子长短不一,画起来确实是费劲,查了不少资料,总结一下:

html部分:


<canvas id='secondCanvas' canvas-id='secondCanvas' style='width:{{414}}px;height:{{750}}px;'></canvas>


js部分:


function findBreakPoint(text, width, context) {

 var min = 0;

 var max = text.length - 1;

 while (min <= max) {

 var middle = Math.floor((min + max) / 2);

 var middleWidth = context.measureText(text.substr(0, middle)).width;

 var oneCharWiderThanMiddleWidth = context.measureText(text.substr(0, middle + 1)).width;

 if (middleWidth <= width && oneCharWiderThanMiddleWidth > width) {

 return middle;

    }

 if (middleWidth < width) {

      min = middle + 1;

    } else {

      max = middle - 1;

    }

  }

 return -1;

}

function breakLinesForCanvas(context, text, width, font) {

 var result = [];

 if (font) {

    context.font = font;

  }

 var textArray = text.split('\r\n');

 for (let i = 0; i < textArray.length; i++) {

 let item = textArray[i];

 var breakPoint = 0;

 while ((breakPoint = findBreakPoint(item, width, context)) !== -1) {

      result.push(item.substr(0, breakPoint));

      item = item.substr(breakPoint);

    }

 if (item) {

      result.push(item);

    }

  }

 return result;

}

Page({

 /**

   * 页面的初始数据

   */

  data: {

    id: 0,

    info: {}

  },

 /**

   * 生命周期函数--监听页面加载

   */

  onLoad: function (options) {

 var that = this

 let info = {

 "0": "标题标题标题标题标题标题标题标题",

 "1": "内容内容内容内容内容内容内容内容内容内容内容",

 "2": "我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是我是",

    };

    that.drawInit(info);

  },

  canvasIdErrorCallback: function (e) {

    console.error(e.detail.errMsg)

  },

 /**

  * 生命周期函数--监听页面初次渲染完成

  */

  onReady: function (e) {},

 /**

   * 绘制图片

   */

  drawInit(info){

 var that = this

 var res = wx.getSystemInfoSync()

 var canvasWidth = res.windowWidth

 // 获取canvas的的宽  自适应宽(设备宽/750) px

 var Rpx = (canvasWidth / 375).toFixed(2)

 //画布高度 -底部按钮高度

 var canvasHeight = res.windowHeight - Rpx * 59

 // 使用 wx.createContext 获取绘图上下文 context

 var context = wx.createCanvasContext('secondCanvas')

 //设置行高

 var lineHeight = Rpx * 30

 //左边距

 var paddingLeft = Rpx * 20

 //右边距

 var paddingRight = Rpx * 20

 //当前行高

 var currentLineHeight = Rpx * 20

 var result

 for (var i in info){

      result = breakLinesForCanvas(context, info[i] || '无内容', canvasWidth - paddingLeft - paddingRight, `${(Rpx * 16).toFixed(0)}px PingFangSC-Regular`)

 //字体颜色

      context.fillStyle = '#000000'

      result.forEach(function (line, index) {

        currentLineHeight += Rpx * 30

        context.fillText(line, paddingLeft, currentLineHeight)  // currentLineHeight 表示文字在整个页面的位置:currentLineHeight + 300 表示整体下移 300px

      });

    }

    context.draw()

  }

})


先这样吧。。。

目录
相关文章
|
7天前
|
小程序 前端开发 API
小程序全栈开发中的多端适配与响应式布局
【4月更文挑战第12天】本文探讨了小程序全栈开发中的多端适配与响应式布局。多端适配涉及平台和设备适应,确保统一用户体验;响应式布局利用媒体查询和弹性布局维持不同设备的布局一致性。实践中,开发者可借助跨平台框架实现多平台开发,运用响应式布局技术适应不同设备。同时,注意兼容性、性能优化和用户体验,以提升小程序质量和用户体验。通过这些方法,开发者能更好地掌握小程序全栈开发。
|
7天前
|
小程序 前端开发 API
微信小程序全栈开发中的异常处理与日志记录
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的异常处理和日志记录,强调其对确保应用稳定性和用户体验的重要性。异常处理涵盖前端(网络、页面跳转、用户输入、逻辑异常)和后端(数据库、API、业务逻辑)方面;日志记录则关注关键操作和异常情况的追踪。实践中,前端可利用try-catch处理异常,后端借助日志框架记录异常,同时采用集中式日志管理工具提升分析效率。开发者应注意安全性、性能和团队协作,以优化异常处理与日志记录流程。
|
7天前
|
小程序 安全 数据安全/隐私保护
微信小程序全栈开发中的身份认证与授权机制
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的身份认证与授权机制。身份认证包括手机号验证、微信登录和第三方登录,而授权机制涉及角色权限控制、ACL和OAuth 2.0。实践中,开发者可利用微信登录获取用户信息,集成第三方登录,以及实施角色和ACL进行权限控制。注意点包括安全性、用户体验和合规性,以保障小程序的安全运行和良好体验。通过这些方法,开发者能有效掌握小程序全栈开发技术。
|
7天前
|
小程序 前端开发 安全
小程序全栈开发中的跨域问题及其解决方案
【4月更文挑战第12天】本文探讨了小程序全栈开发中的跨域问题及其解决方案。跨域问题源于浏览器安全策略,主要体现在前后端分离、第三方服务集成和数据共享上。为解决此问题,开发者可采用CORS、JSONP、代理服务器、数据交换格式和域名策略等方法。实践中需注意安全性、兼容性和性能。通过掌握这些解决方案,开发者能更好地处理小程序的跨域问题,提升用户体验。
|
7天前
|
JavaScript 前端开发 小程序
微信小程序全栈开发之性能优化策略
【4月更文挑战第12天】本文探讨了微信小程序全栈开发的性能优化策略,包括前端的资源和渲染优化,如图片压缩、虚拟DOM、代码分割;后端的数据库和API优化,如索引创建、缓存使用、RESTful API设计;以及服务器的负载均衡和CDN加速。通过这些方法,开发者可提升小程序性能,优化用户体验,增强商业价值。
|
7天前
|
小程序 前端开发 JavaScript
微信小程序全栈开发中的PWA技术应用
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中PWA技术的应用,PWA结合Web的开放性和原生应用的性能,提供离线访问、后台运行、桌面图标和原生体验。开发者可利用Service Worker实现离线访问,Worker处理后台运行,Web App Manifest添加桌面图标,CSS和JavaScript提升原生体验。实践中需注意兼容性、性能优化和用户体验。PWA技术能提升小程序的性能和用户体验,助力开发者打造优质小程序。
|
7天前
|
小程序 前端开发 API
小程序全栈开发中的RESTful API设计
【4月更文挑战第12天】本文探讨了小程序全栈开发中的RESTful API设计,旨在帮助开发者理解和掌握相关技术。RESTful API基于REST架构风格,利用HTTP协议进行数据交互,遵循URI、客户端-服务器架构、无状态通信、标准HTTP方法和资源表述等原则。在小程序开发中,通过资源建模、设计API接口、定义资源表述及实现接口,实现前后端高效分离,提升开发效率和代码质量。小程序前端利用微信API与后端交互,确保数据流通。掌握这些实践将优化小程序全栈开发。
|
7天前
|
SQL 安全 小程序
探索微信小程序全栈开发的安全性问题
【4月更文挑战第12天】本文探讨了微信小程序全栈开发中的安全性问题,包括数据安全、接口安全、隐私保护和代码安全。为解决这些问题,建议采取数据加密、使用HTTPS协议、身份认证与授权、输入验证、安全审计及漏洞扫描以及安全培训等措施。通过这些方法,开发者可提升小程序安全性,保护用户隐私和数据。
|
7天前
|
小程序 前端开发 JavaScript
小程序全栈开发:前端与后端的完美结合
【4月更文挑战第12天】本文介绍了小程序全栈开发,涵盖前端和后端的关键点。前端使用WXML和WXSS进行页面结构和样式设计,JavaScript处理逻辑及组件使用;后端采用Node.js等语言处理业务逻辑、数据库设计和API接口开发。前端与后端通过数据交互实现结合,采用前后端分离模式,支持跨平台运行。调试测试后,提交微信审核并上线运营。掌握前端后端结合是小程序成功的关键。
|
10天前
|
小程序 数据库
【微信小程序7】云开发中实时聊天系统的实现方法
【微信小程序7】云开发中实时聊天系统的实现方法
21 0

热门文章

最新文章