• uni-app:获取元素宽高


    效果

    代码

    这里我定义的宽为500px,高为200排序,控制台输出的结果是502,202。原因是我设置了上下左右宽度各为1px的border边框导致

    核心代码分析

    // const query = uni.createSelectorQuery();表示创建了一个选择器查询实例。通过这个实例,你可以使用不同的方法来选择页面中的 DOM 元素,并执行一系列操作,比如获取节点信息、监听节点属性变化等。
    const query = uni.createSelectorQuery();
    //选择id为mybox的元素节点。
    query.select('#mybox').fields({
     
       //指定要获取的属性,这里设置为size: true表示要获取尺寸信息。
        size: true,
     
       //在回调函数(res) => {...}中处理查询结果。回调函数会接收一个res参数,其中包含了查询的结果信息。
    }, (res) => {
     
       // 在回调函数中,通过res.width和res.height获取到查询元素的宽度和高度。
        const width = res.width;
        const height = res.height;
        console.log(width)
        console.log(height)
    }).exec();

    1. <template>
    2. <view>
    3. <view id="mybox">求我的宽高view>
    4. view>
    5. template>
    6. <script>
    7. export default {
    8. data() {
    9. return {
    10. };
    11. },
    12. onReady() {
    13. const query = uni.createSelectorQuery();
    14. //获取宽度
    15. query.select('#mybox').fields({
    16. size: true
    17. }, (res) => {
    18. const width = res.width;
    19. const height = res.height;
    20. console.log(width)
    21. console.log(height)
    22. }).exec();
    23. },
    24. methods: {
    25. },
    26. };
    27. script>
    28. <style>
    29. #mybox {
    30. width: 500px;
    31. height: 200px;
    32. border: 1px solid black;
    33. }
    34. style>

    注:如果获取到宽高之后还有别的操作,建议放在回调函数中进行,否则可能出现先执行别的操作,再成功获取宽高的问题

    例如:下面的例子便是在回调函数中使用画布方法

    1. //创建一个画布上下文对象,用于进行绘图操作。'firstCanvas'是一个指定的画布标识符,表示在页面上的哪个 元素上进行绘制。
    2. var context = uni.createCanvasContext('firstCanvas')
    3. var width = '';
    4. const query = uni.createSelectorQuery();
    5. //获取宽度
    6. query.select('#firstCanvas').fields({
    7. size: true
    8. }, (res) => {
    9. width = res.width;
    10. //获取到宽度进行绘制
    11. //绘制路径中的线条。
    12. context.setStrokeStyle("#aaaaff")
    13. // 设置线条的宽度为2个像素。
    14. context.setLineWidth(2)
    15. // 绘制横线
    16. context.beginPath(); // 开始路径绘制
    17. context.moveTo(width / 2, 0); // 将起点移动到 (0, 100)
    18. context.lineTo(width / 2, 50);
    19. context.stroke(); // 绘制线条
    20. var x1 = width / 4; // 第一个竖线的起点 x 坐标
    21. var y1 = 50; // 第一个竖线的起点 y 坐标
    22. var y2 = 30; // 短竖线的高度
    23. var horizontalLength = width / 2; // 横线的长度
    24. context.beginPath();
    25. context.moveTo(x1, y1 + y2); // 移动到第一个短竖线的起点
    26. context.lineTo(x1, y1); // 绘制第一个短竖线
    27. context.moveTo(x1 + horizontalLength, y1 + y2); // 移动到横线的右端下方
    28. context.lineTo(x1 + horizontalLength, y1); // 绘制第二个短竖线
    29. context.moveTo(x1, y1); // 移动到横线的左端下方
    30. context.lineTo(x1 + horizontalLength, y1); // 绘制横线/* */
    31. context.stroke(); // 绘制线条
    32. // 将之前的绘图操作渲染到画布上。
    33. context.draw()
    34. }).exec();

  • 相关阅读:
    牛亚男:基于多Domain多任务学习框架和Transformer,搭建快精排模型
    QT day3
    RabbitMQ超详细安装教程(Linux)
    第二届全国高校计算机技能竞赛——C++赛道 题解
    基于JavaGUI的中英文打字训练测试软件设计
    “重保季”来临,网站及业务系统拒绝“裸奔”与“带病在线”!
    Flowable实战:启动事件与结束事件
    【OpenCV】基于opencv的视频间隔抽帧脚本
    Android 9.0 ~ 12 获取系统内存大小、存储空间大小
    安装TimeGen波形绘图软件
  • 原文地址:https://blog.csdn.net/weixin_46001736/article/details/133375890