小程序 模拟今日头条导航栏,点击锚点跳转对应楼层

使用场景,顶部导航的个数不确定,会有超出屏幕的情况,在一行展示,每点击一个导航的tab会判断是否向左或者像右滚动一个距离,以使当前的点击的导航能看到。同时点击导航会锚点跳转对应楼层,当前导航会变为激活状态。滚动屏幕,滚动到对应楼层,对应导航变为激活状态。

1.代码实现

1.1wxml

<!-- 楼盘相册 -->
<scroll-view class='xcnyTab' scroll-x scroll-left="{
  {tabScroll}}" scroll-with-animation="true">
  <view wx:for='{
  {xcnyHead}}' class='xcnyTabLi {
  {currentTab == index ? "on" : ""}}' data-current="{
  {index}}" bindtap='clickMenu'>
    {
  {item}}
    <view class='xcnyTabLi-line'></view>
  </view>
</scroll-view>
<!-- 所有种类 -->
<scroll-view scroll-y style='height:{
  {ht}}px;' scroll-with-animation="true" bindscroll="scrollRight" scroll-into-view="{
  {toViewRt}}">
  <view class='xcnyAll'>
    <!-- vr -->
    <!-- a_type (vr: 11) (视频: 12)  (其他图片) -->
    <block wx:for="{
  {xcnyList}}" wx:for-item="list" wx:for-index="listidx">
      <view class='xcnyAll-title' id='t{
  {listidx}}'>{
  {list.a_name}}</view>
      <view class='xcnyAllList {
  {list.flag==1?"":"h523hidden"}}'>
        <view class='xcnyAllList-wrap clearfix'>
          <block>
            <view class='xcnyAllLi' wx:for="{
  {list.a_photos}}" data-listidx="{
  {listidx}}" data-index="{
  {index}}" bindtap='godetail'>
              <image class='xcnyAllLi-img' src='{
  {item.p_thumb}}'></image>
              <!-- vr:11 -->
              <view wx:if="{
  {list.a_type==11}}" class='xcnyAllLi-vr'></view>
              <!-- 视频: 12 -->
              <view wx:if="{
  {list.a_type==12}}" class='xcnyAllLi-video'></view>
            </view>
          </block>
          <block wx:if="{
  {12<list.a_photos.length}}">
            <view class='xcnyAllLi-more' data-listidx="{
  {listidx}}" wx:if="{
  {!list.flag}}" bindtap='getmore'></view>
          </block>
        </view>
      </view>
    </block>
  </view>
</scroll-view>

1.2wxss

.xcnyTab{
  width: 100%;
  white-space: nowrap;
  border-top: 1rpx solid #f1f1f1;
  border-bottom: 1rpx solid #f1f1f1;
}

.xcnyTabLi{
  height: 80rpx;
  display: inline-block;
  width: 18.18%;
  text-align: center;
  position: relative;
  font-size: 28rpx;
  color: #404040;
  line-height: 80rpx;
  
}

.xcnyTabLi.on{
  color: #ff7500;
}

.xcnyTabLi.on .xcnyTabLi-line{
  width: 36rpx;
  height: 5rpx;
  background-color: #ff7500;
  position: absolute;
  left: 50%;
  margin-left: -18rpx;
  top:60rpx;
}

/* 所有种类 */
.xcnyAll{
  width: 716rpx;
  margin: 0 auto;
}

.xcnyAll-title{
  font-size: 32rpx;
  color: #8a8a8a;
  line-height: 34rpx;
  padding-top: 40rpx;
}

.xcnyAllList{
  width: 100%;
  overflow: hidden;
  margin-top: 25rpx;
  position: relative;
}

.xcnyAllList.h523hidden{
  max-height: 523rpx;
  overflow: hidden;
}


.xcnyAllList-wrap{
  width: 716rpx;
}

.xcnyAllLi-more{
  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAHQAAAAXCAYAAADa+mvTAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyZpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNi1jMTM4IDc5LjE1OTgyNCwgMjAxNi8wOS8xNC0wMTowOTowMSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpIiB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOkUzMTQzOTA3QzdEMzExRTlCRjA4QjNCNjc1NDI2QzRFIiB4bXBNTTpEb2N1bWVudElEPSJ4bXAuZGlkOkUzMTQzOTA4QzdEMzExRTlCRjA4QjNCNjc1NDI2QzRFIj4gPHhtcE1NOkRlcml2ZWRGcm9tIHN0UmVmOmluc3RhbmNlSUQ9InhtcC5paWQ6RTMxNDM5MDVDN0QzMTFFOUJGMDhCM0I2NzU0MjZDNEUiIHN0UmVmOmRvY3VtZW50SUQ9InhtcC5kaWQ6RTMxNDM5MDZDN0QzMTFFOUJGMDhCM0I2NzU0MjZDNEUiLz4gPC9yZGY6RGVzY3JpcHRpb24+IDwvcmRmOlJERj4gPC94OnhtcG1ldGE+IDw/eHBhY2tldCBlbmQ9InIiPz6Hl6ueAAAEoElEQVR42sRajZGqMBDGGRvIK4EWeCVgCVwJWAKWACVICViClCAlSAlSgi/xfbnZ20tCAhEzs+MdQnazu9/+YZJ4rufzmUu6SaqSDZfkJ8C73Jq3p3yalJxnSRm5tjntA2QXkjJJ/VLDyI/ccUvG/haglO3T73a7gV07s+fXrkHyOAbq5kpkOH7KwfZQiFJaOXOvVqzywNpDIRfD852vQsmn2meSNCpnkvtOFmfIPqTDCiQgp6LacqbLu4XZwaBFgLJ9ViMVfzKgtLDcPwK9ShEH+Wy/MAK4Vo4zfs1FGYvTcH4VQJD66kTSaROE4oBflnsKUIsD9EDDgGsuhFEFpDPoL+HdwmF4tSaTwbURPAy7yJAqN8Ip9Kfmc4GhJkso7nC+doFImUmXa4qRTtJDeaNS8vP/qpH4H/heeO5XP+Osm4PHbaO9b9BJOlOknHF/tbDIUXyuIc/vLUgqCWJUCBwoavD/Ad53l38r72vl9dFh09bhbWfw8glJk2d4M0WBAogaLbnQtY5AZo/za/SpzwOTS3+X49zNQlxdIFcOe7SgyQdBJRD3JEgUNP/p6wzFFHnq+dKBeBPVxIuFL82gSJjyN74rLLI5EWrLowSxAiipEL20Dte2IgJ73rHnw9Ue6YM+mFEyh0JqU34h4VkzLSKGQtMSLoMa6Nuglu+DDcqMeiVKv4NP7D6zAh9qqx98dJXbkbK6IAnfFLJ6S+icSOGUy7B0YBWhsOw3LSkYLFX0bWX7otqtvx7VdEb68pzwnFiILb1DZNgqCOmitn91FxGVMqsMphTdiM+2Eb7tBJF9aQ51ngHRqTI4slZoaxg0tG8cNGSk3lHryzUp+hOw8SOwX6RTlS7gWV+nabjxkQJeBuVDD8jkM1ZsWO88GKIVHTRcYOjC0NaNK42ZMpSq/aZ9hAZbBBgkI31Z4kBLsqAKnZMrWyKzQR8nPsslyuWDhsJgzLVDhgy6KNgEqqGDBdO6QthYfW2JSZCAEJkJLQ7jVJEiRhfhLHouneIzJ7nMdZ6SjAiX5M2S8Wo5v32ywcLwXPe1Ryji5WmR36BcHPm4AN9mTY+rKliGwpEo
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值