sweetair 2018-12-27 09:06
浏览 2243

微信小程序`类吸顶`方式的实现坎坷路?

这是个请教贴

问题描述

前不久参考了手机通讯录、QQ联系人列表等展示效果,意欲在小程序中实现同样类吸顶效果(暂时就这么称呼吧,不知道有没有什么专业术语来描述这一样式)。目前已经使用html + css实现了浏览器端的效果,主要是采用了csssticky,问题在于微信不支持这个方式。无奈之下,各种尝试后,发现了createIntersectionObserver,通过对标题栏的各种状态操作,实现类吸顶效果,在模拟器上预览还凑活的过去,一旦使用安卓手机预览,就卡到无法忍受的地步了。据这几天的了解,应该是createIntersectionObserver的回调函数耗时导致的卡顿。

现状

html + css实现方式可见此处sticky_header

html + css 实现 sticky_header

小程序中通过createIntersectionObserver实现的效果如下,同时可参考代码片段sticky_header

createIntersectionObserver 实现 sticky_header

吐露心声

在这里请教诸位同道中人,是不是我在小程序中的方向走错了,不知大家有什么好的实现方式或者idea,还望诸位不吝赐教。

写在最后

放一下小程序实现时的关键性代码,节省大神们的时间

this._observerFooter = wx.createIntersectionObserver(this, { thresholds: [1], observeAll: true });
this._observerHeader.relativeToViewport().observe('.sticky_sentinel--top', (res) => {
  if (res.intersectionRatio == 0 && res.boundingClientRect.top < 0) {
    console.log('----item--allhidden--', res);
    this.setData({
      ['positions[' + res.id.replace('sticky_sentinel--top', '') + ']']: 'fixed'
    })
  }
  if (res.intersectionRatio > 0 && res.intersectionRatio != 1) {
    console.log('----item--2show--', res);
    this.setData({
      ['positions[' + res.id.replace('sticky_sentinel--top', '') + ']']: 'absolute top'
    })
  }
  console.log(this.data);
});

源代码在两处链接均可获得,谢谢大家了。

  • 写回答

0条回答 默认 最新

    报告相同问题?

    悬赏问题

    • ¥30 截图中的mathematics程序转换成matlab
    • ¥15 动力学代码报错,维度不匹配
    • ¥15 Power query添加列问题
    • ¥50 Kubernetes&Fission&Eleasticsearch
    • ¥15 有没有帮写代码做实验仿真的
    • ¥15 報錯:Person is not mapped,如何解決?
    • ¥15 c++头文件不能识别CDialog
    • ¥15 Excel发现不可读取的内容
    • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
    • ¥20 yolov5自定义Prune报错,如何解决?