微信小程序实现watch监听数值改变的效果

前言

  • 需要用到Javascript中的Object.defineProperty()方法,实现劫持对象的get/set指令,从而监听到对象的赋值(调用setter),达到监听数值改变效果

示例

监听变量方法:

function watchData(pageData, key, fn) {
  var oldVal = pageData[key];
  Object.defineProperty(pageData, key, {
    configurable: true,
    enumerable: true,
    get: function () {
      return oldVal ;
    },
    set: function (newVal) {
      if (newVal === oldVal) return;
      fn && fn(newVal);
      oldVal = newVal;
    },
  });
  fn && fn(oldVal);
}

监听 scrollTop 的值的变化,根据 scrollTop 的值调整导航栏的样式:

onShow: function (option) {
    const that = this;
    this.watchData('scrollTop', val => {
      if (scrollTop > 200) {
        that.setData({navBarStyle: 'mimi'});
      } else {
      	that.setData({navBarStyle: 'default'});
      }
    });
}

参考

https://blog.csdn.net/weixin_37680520/article/details/105875333
https://blog.csdn.net/Derrrrrd/article/details/124902590
https://blog.csdn.net/y13103192727/article/details/123397219

相关推荐

  1. 程序实现watch监听数值改变效果

    2023-12-06 20:56:03       63 阅读
  2. 程序】canvas绘实现贴纸效果

    2023-12-06 20:56:03       52 阅读
  3. 程序监听App中globalData——全局数据监听

    2023-12-06 20:56:03       32 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-06 20:56:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-06 20:56:03       106 阅读
  3. 在Django里面运行非项目文件

    2023-12-06 20:56:03       87 阅读
  4. Python语言-面向对象

    2023-12-06 20:56:03       96 阅读

热门阅读

  1. 牛刀小试 - 交换两个数(异或版)

    2023-12-06 20:56:03       62 阅读
  2. Nginx漏洞复现与分析

    2023-12-06 20:56:03       49 阅读
  3. 【小白推荐】安装OpenCV4.8 系统 Ubuntu 22.04LST Linux.

    2023-12-06 20:56:03       54 阅读
  4. [nlp] id2str的vocab.json转换为str2id

    2023-12-06 20:56:03       49 阅读
  5. 微信小程序如何分包管理

    2023-12-06 20:56:03       60 阅读
  6. PHP常见错误

    2023-12-06 20:56:03       50 阅读