账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    vant-weapp源码之vant-sticky的疑问
    79
    0

    业务背景

    仿vant-weapp实现一个兼容各小程序及h5的吸顶效果。原本以为这个只是简单的css position:sticky属性就能完成的

    问题

    之前也通过sticky的css属性实现过吸顶,未发现有啥异常..可是有赞这个ui为啥要搞得这么复杂,通过元素相交状态来实现呢?

    vant-weapp相关链接

    文档: https://youzan.github.io/vant...
    源码链接: https://github.com/youzan/van...
    源码部分

    observeContainer() {
          if (typeof this.data.container !== 'function') {
            return;
          }
    
          const { height } = this.data;
    
          this.getContainerRect().then(
            (rect: WechatMiniprogram.BoundingClientRectCallbackResult) => {
              this.containerHeight = rect.height;
    
              this.disconnectObserver('containerObserver');
              const containerObserver = this.createIntersectionObserver({
                thresholds: [0, 1]
              });
              this.containerObserver = containerObserver;
              containerObserver.relativeToViewport({
                top: this.containerHeight - height
              });
              containerObserver.observe(ROOT_ELEMENT, res => {
                this.setFixed(res.boundingClientRect.top);
              });
            }
          );
        },
    2
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 小鸡吃米线 普通会员 1楼

      vant-sticky是vant库中的一个组件,用于实现页面滚动时左右栏的停留效果。在使用 vant-sticky 的过程中,可能会遇到一些问题,比如在页面滚动时左右栏的位置不对等。以下是针对这些问题的一些解答:

      1. 页面滚动时左右栏的位置不对

      在使用 vant-sticky 的过程中,你需要明确左右栏的宽度和高度。通常情况下,左右栏的宽度应该与页面宽度相同,而高度应该根据页面的内容动态调整。

      例如,如果你的页面宽度是1000px,那么左右栏的高度也应该为1000px。如果你发现左右栏的位置不对,可能是你的代码中出现了错误,或者左右栏的样式没有正确设置。

      1. 在页面滚动时左右栏的位置不对

      如果你在页面滚动时左右栏的位置仍然不对,可能是你的布局没有正确设置。通常情况下,你应该在页面上使用vh或vw作为单位来设置布局的宽度和高度。

      例如,如果你的布局是这样的:

      .container { width: 100%; height: 100vh; }

      那么,你应该使用以下代码来设置左右栏:

      .left-side { width: 200px; height: 50vh; } .right-side { width: 800px; height: 50vh; }

      1. 页面滚动时左右栏的停留效果

      在使用 vant-sticky 的过程中,如果你发现左右栏的停留效果不理想,可能是你的样式没有正确设置。通常情况下,你应该在样式文件(如vant-sticky.css)中设置样式。

      例如,如果你想要在页面滚动时左右栏停留3秒,你可以使用以下代码:

      .sticky { height: 50vh; position: sticky; top: 0; left: 0; width: 100%; transition: all 3s; }

      然后,你可以在对应的组件(如左侧栏的组件)中设置样式:

      .left-side { background-color: #f0f0f0; padding: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); transition: all 3s; }

      这样,当你滚动页面时,左侧栏就会有停留效果,停留时间为3秒。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部