zoukankan      html  css  js  c++  java
  • 微信小程序锚点跳转(仿京东小程序tab效果)

    1、锚点按钮

    data-* 的值对应要跳转的锚点的id值

    2、点击按钮时,将toView的值设置为当前点击的按钮的data-*的值一定要用setData方法,不能直接用this.toView=... ,不然页面的值无法改变

    3、给需要跳转的内容外加上<scroll-view ></scroll-view>

    scroll-into-view的值为需要跳转到的位置的id值

    scroll-y:是否为垂直滚动

    scroll-with-animation:是否加滚动动画效果

    tips:

    1、page设置高度为100%;

    2、必须设置scroll-view的高度(我设置的为设备的高)

    以下为点击跳转锚点的完整代码

    <!--pages/test/test.wxml-->
    <view class="menu">
      <view class='item {{nowstatus == "productBox" ? "on" : ""}}' bindtap="toViewClick" data-hash="productBox">商品</view>
      <view class='item {{nowstatus == "commentBox" ? "on" : ""}}' bindtap="toViewClick" data-hash="commentBox">评论</view>
      <view class='item {{nowstatus == "infoBox" ? "on" : ""}}' bindtap="toViewClick" data-hash="infoBox">详情</view>
    </view>
    <scroll-view class="box" style="height:{{winHeight}}"  scroll-into-view="{{toView}}" scroll-y="true" scroll-with-animation="true">
      <view id="productBox">商品图</view>
      <view id="commentBox">评论部分</view>
      <view id="infoBox">详情部分</view>
    </scroll-view>
    // pages/test/test.js
    Page({
      data: {
        winHeight:'100%',
        toView:'productBox',
        nowstatus:'productBox'
      },
      onLoad: function (options) {
        let that=this;
        wx.getSystemInfo({
          success: function(res) {
            that.setData({
              winHeight: res.windowHeight - (res.windowWidth * 90 / 750) + 'px'
            })
          },
        })
      },
      toViewClick:function(e){
        this.setData({
          toView: e.target.dataset.hash,
          nowstatus: e.target.dataset.hash
        })
      }
    })
    /* pages/test/test.wxss */
    page{
      height:100%;
    }
    .box{height:100%; margin-top:60rpx;}
    .box view{
      height:1500rpx;
      text-align: center;
    }
    .menu{
      display: flex;
      background:#fff;
      padding:40rpx 0 10rpx 20%;
    }
    .menu .item{
      width:20%;
      line-height: 80rpx;
      color:#333;
      text-align: center;
    }
    .menu .item.on{
      color:red;
      border-bottom:2px solid red;
    }
    {
      "navigationStyle": "custom"
    }

     

    ----------------------------------------- 滑动时相应的tab高亮显示 --------------------------------------------------

    1、获取每个部分距顶部的高度

      onLoad: function (options) {
        let that=this;
        let query = wx.createSelectorQuery();
        query.select('#commentBox').boundingClientRect(res => { //获取评论距离页面顶部高度
          that.setData({
            commentBoxTop: res.top
          })
        }).exec()
        query.select('#infoBox').boundingClientRect(res => { //获取详情部分距离页面顶部高度
          that.setData({
            infoBoxTop: res.top
          })
        }).exec()
      }

    2、监听当前滑动

    3、对比当前滑动的距离和每个部分距顶部的高度

      onPageScroll: function (e) {
        var that=this;
        console.log(that.data.infoBoxTop)
        console.log(e.detail.scrollTop)
        if (e.detail.scrollTop <= that.data.commentBoxTop - 80){
          that.setData({
            nowstatus: 'productBox'
          })
        }
        if (e.detail.scrollTop > that.data.commentBoxTop -80){
          that.setData({
            nowstatus:'commentBox'
          })
        }
        if (e.detail.scrollTop > that.data.infoBoxTop - 80){
          console.log("true")
          that.setData({
            nowstatus: 'infoBox'
          })
        }
      }
  • 相关阅读:
    docker学习
    redis哨兵部署
    HUE中一些重要元数据表的DDL整理
    Autosys中ON_HOLD和ON_ICE的区别
    Spark结构化API的执行过程——Logical Plan & Physical Plan
    关于Spark中Columns的引用方法
    关于Spark Dataset API中的Typed transformations和Untyped transformations
    关于Kafka Consumer 与 Partitions
    使用sed根据变量值注释掉文件中相匹配的记录行
    sqoop export to teradata时出现java.lang.NullPointerException
  • 原文地址:https://www.cnblogs.com/xsffliu/p/11097846.html
Copyright © 2011-2022 走看看