微信小程序第三篇:获取页面节点信息

获取节点信息

createSelectorQuery

wx.createSelectorQuery()可以用于获取节点属性、样式、在界面上的位置等信息。
最常见的用法是使用这个接口来查询某个节点的当前位置,以及界面的滚动位置。

示例代码:

const query = wx.createSelectorQuery()
query.select('#the-id').boundingClientRect()
query.selectViewport().scrollOffset()
query.exec(function(res){
  res[0].top       // #the-id节点的上边界坐标
  res[1].scrollTop // 显示区域的竖直滚动位置
})

在自定义组件或包含自定义组件的页面中,使用 this.createSelectorQuery 来代替 wx.createSelectorQuery ,这样可以确保在正确的范围内选择节点。

selectViewport

selectViewport() 可以用来获取 scroll-view 的尺寸、滚动位置等信息

*注意:selectViewport()没有参数的

选择显示区域。可用于获取显示区域的尺寸、滚动位置等信息
  onLoad: function (options) {
      const query=wx.createSelectorQuery();		//创建一个SelectorQuery 对象实例
      query.selectViewport().					//选择显示区域
      scrollOffset(function(res){				//查询节点(必须是scroll-view / viewport)的滚动位置
          res.id      // 节点的ID
	      res.dataset // 节点的dataset
	      res.scrollLeft // 节点的水平滚动位置
	      res.scrollTop  // 节点的竖直滚动位置
       }).exec()
    
   }

boundingClientRect

添加节点的布局位置的查询请求。相对于显示区域,以像素为单位。
在执行 SelectorQuery.exec 方法后,节点信息会在 callback 中返回。

示例代码:

Page({
  getRect () {
    wx.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){
      rect.id      // 节点的ID
      rect.dataset // 节点的dataset
      rect.left    // 节点的左边界坐标
      rect.right   // 节点的右边界坐标
      rect.top     // 节点的上边界坐标
      rect.bottom  // 节点的下边界坐标
      rect.width   // 节点的宽度
      rect.height  // 节点的高度
    }).exec()
  },
  getAllRects () {
    wx.createSelectorQuery().selectAll('.a-class').boundingClientRect(function(rects){
      rects.forEach(function(rect){
        rect.id      // 节点的ID
        rect.dataset // 节点的dataset
        rect.left    // 节点的左边界坐标
        rect.right   // 节点的右边界坐标
        rect.top     // 节点的上边界坐标
        rect.bottom  // 节点的下边界坐标
        rect.width   // 节点的宽度
        rect.height  // 节点的高度
      })
    }).exec()
  }
})

fields

获取节点的相关信息。需要获取的字段在 fields 中指定。

示例代码:

Page({
  getFields () {
    wx.createSelectorQuery().select('#the-id').fields({
      dataset: true,
      size: true,
      scrollOffset: true,
      properties: ['scrollX', 'scrollY'],
      computedStyle: ['margin', 'backgroundColor'],
      context: true,
    }, function (res) {
      res.dataset    // 节点的dataset
      res.width      // 节点的宽度
      res.height     // 节点的高度
      res.scrollLeft // 节点的水平滚动位置
      res.scrollTop  // 节点的竖直滚动位置
      res.scrollX    // 节点 scroll-x 属性的当前值
      res.scrollY    // 节点 scroll-y 属性的当前值
      // 此处返回指定要返回的样式名
      res.margin
      res.backgroundColor
      res.context    // 节点对应的 Context 对象
    }).exec()
  }
})
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微信小程序提供了一个wx.canvasToTempFilePath() API,可以把一个canvas画布保存成图片。我们可以使用这个API把页面转成canvas画布,然后再把画布转成图片,最后再把图片转成pdf文件。 具体步骤如下: 1. 在wxml中定义一个canvas画布,用于把页面内容画到画布上: ``` <canvas id="myCanvas" style="width: 100%; height: 100%;"></canvas> ``` 2. 在js中获取canvas画布,并把页面内容画到画布上: ``` // 获取canvas上下文 const ctx = wx.createCanvasContext('myCanvas', this); // 获取页面节点 const pageNode = this.selectComponent('#page'); // 把页面内容画到画布上 wx.canvasGetImageData({ canvasId: 'myCanvas', x: 0, y: 0, width: pageNode.width, height: pageNode.height, success: (res) => { wx.canvasPutImageData({ canvasId: 'myCanvas', data: res.data, x: 0, y: 0, width: pageNode.width, height: pageNode.height, success: () => { console.log('画布内容已更新'); } }); } }); ``` 3. 把canvas画布转成图片,并把图片保存到本地: ``` wx.canvasToTempFilePath({ canvasId: 'myCanvas', success: (res) => { const tempFilePath = res.tempFilePath; wx.saveFile({ tempFilePath, success: (res) => { const savedFilePath = res.savedFilePath; console.log(`图片已保存到本地:${savedFilePath}`); } }); } }); ``` 4. 把图片转成pdf文件: 由于微信小程序没有提供直接把图片转成pdf文件的API,我们可以使用第三方库jsPDF来实现。具体步骤如下: - 在wxml中引入jsPDF库: ``` <script src="../../lib/jspdf.min.js"></script> ``` - 在js中使用jsPDF库把图片转成pdf文件: ``` // 获取图片本地路径 const imagePath = `${wx.env.USER_DATA_PATH}/${savedFileName}`; // 创建jsPDF实例 const pdfDoc = new jsPDF('p', 'mm', 'a4'); // 加载图片 const imgData = pdfDoc.addImage(imagePath, 'PNG', 0, 0, 210, 297); // 把图片添加到pdf文件中 pdfDoc.addImage(imgData, 'PNG', 0, 0, 210, 297); // 保存pdf文件 pdfDoc.save(`${savedFileName}.pdf`); ``` 注意:由于jsPDF库的体积较大,建议在使用前先进行压缩,只保留需要用到的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YinJie…

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值