原生微信小程序,楼层跳转,scroll-into-view,实例+遇到的坑

原生微信小程序,楼层跳转,scroll-into-view,实例+遇到的坑

先看一下演示效果

在这里插入图片描述

需要注意的几个踩坑点
1 . scroll-view 必须设置 scroll-y="true" 或者 scroll-x="true"看你想往哪个方向滚动

2 . scroll-into-view=" { {toViewId}} " 的值,必须是动态的,不能是写死的,一般也不应该出现写死的情况
(且值应为某子元素的 id( id不能以数字开头 ))

3 . 还是和上面一样,scroll-into-view=" { {toViewId}} "中的变量值,必须和其下的某个子元素的 id 一一对应,这个子元素的 id 就是你要跳转到的地方

4 . 最最重要的一点,必须给 scroll-view 设置高度,这个非常重要,高度设置的不准确很容易造成无法跳转的情况
我也是初学者对高度的设置也不是很清楚,但是总结了一下可以用的几种高的设置方式
(1)page 必须设置高度,且高度为100%page { height: 100%; }这样设置可以保证使用的是scroll-view 的滚动条,而不是窗口的滚动条
(2)其次必须设置 scroll-view下面的子项高度为 100%

在这里插入图片描述

(3)如果设置了 page { height: 100%; } 然后下面的子项却设置的是固定值,如height: 7500rpx;等固定值,也会出现无法滚动的情况

在这里插入图片描述

看下代码

.wxml

<scroll-view
 class="view_wrap"
 scroll-into-view="{
     
     {toViewId}}"
 scroll-y="true"
 scroll-with-animation="true"
>
	<view class="view_item" id="{
     
     {item.name+item.id}}" wx:for="{
     
     {list}}">{
   
   {item.name}}</view>
</scroll-view>
<view class="select_wrap">
	<view
	 class="select_item"
	 data-id="{
     
     {item.name+item.id}}"
	 bind:tap="toSelectItem"
	 wx:for="{
     
     {list}}"
	>
		{
   
   {item.name}}
	</view>
</view>

.wxss

page {
    
    
  height: 100%;
}
.view_wrap {
    
    
  height: 7500rpx;
  background: linear-gradient(to bottom, #3dd9df 0%, #f3cd26 100%);
}
.view_wrap .view_item {
    
    
  height: 90vh;
}
.select_wrap {
    
    
  position: fixed;
  right: 0;
  top: 50%;
  transform: translateY(-50%);
}
.select_wrap .select_item {
    
    
  padding: 30rpx;
}

.less

page {
    
    
    height: 100%;
}

.view_wrap {
    
    
    height: 7500rpx;
    background: linear-gradient(to bottom, #3dd9df 0%, #f3cd26 100%);

    .view_item {
    
    
        height: 90vh;
    }
}

.select_wrap {
    
    
    position: fixed;
    right: 0;
    top: 50%;
    transform: translateY(-50%);

    .select_item {
    
    
        padding: 30rpx;
    }
}

.js


Page({
    
    
  data: {
    
    
    list: [
      {
    
    
        id: 0,
        name: "item1"
      },
      {
    
    
        id: 1,
        name: "item2"
      },
      {
    
    
        id: 2,
        name: "item3"
      },
      {
    
    
        id: 3,
        name: "item4"
      },
      {
    
    
        id: 4,
        name: "item5"
      }
    ],
    toViewId: "item10"
  },
  onLoad: function (options) {
    
    

  },
  toSelectItem: function (e) {
    
    
    const {
    
     id } = e.currentTarget.dataset;
    console.log(id)
    this.setData({
    
    
      toViewId: id
    })
  }
})

再提供一个荔枝给大家看看

这个是转载的,原文地址点击这里跳转
我研究了一下,把里面不需要的代码删了,精简一下
效果如下
在这里插入图片描述
代码如下

.wxml

<scroll-view class="content" scroll-into-view="{
     
     {toView}}" scroll-y="true" scroll-with-animation="true">
    <view wx:for="{
     
     {act_addList}}">
        <view class="address_top" id="{
     
     {
     
     'inToView'+item.id}}">{
   
   {item.region}}</view>
        <view wx:for="{
     
     {item.city}}">
            <view class="address_bottom">{
   
   {item.name}}</view>
        </view>
    </view>
</scroll-view>
<view class="orientation_region">
    <view class="orientation">自动定位</view>
    <block wx:for="{
     
     {orientationList}}">
        <view class="orientation_city" bindtap="scrollToViewFn" data-id="{
     
     {item.id}}">
            {
   
   {item.region}}
        </view>
    </block>
</view>

.wxss

page {
    
    
    height: 100%;
}

.content {
    
    
    padding-bottom: 20rpx;
    box-sizing: border-box;
    height: 100%;
}

.address_top {
    
    
    height: 76rpx;
    line-height: 76rpx;
    background: #f4f4f4;
    color: #999999;
    font-size: 28rpx;
    padding: 0 20rpx;
}

.address_bottom {
    
    
    height: 88rpx;
    line-height: 88rpx;
    background: #fff;
    color: #000000;
    font-size: 32rpx;
    padding: 0 20rpx;
    border-bottom: 2rpx #ebebeb solid;
    margin-left: 20rpx;
    margin-right: 50rpx;
}


.orientation {
    
    
    white-space: normal;
    display: inline-block;
    width: 55rpx;
    height: 58rpx;
    color: #999;
    text-align: center;
}

.orientation_region {
    
    
    width: 55rpx;
    font-size: 20rpx;
    position: fixed;
    top: 220rpx;
    right: 0rpx;
}

.orientation_city {
    
    
    height: 50rpx;
    line-height: 50rpx;
    color: #000;
    text-align: center;
}

.js

Page({
    
    
  /** 
   * 页面的初始数据 
   */
  data: {
    
    
    orientationList: [
      {
    
    
        id: "01",
        region: "东北"
      },
      {
    
    
        id: "02",
        region: "华北"
      },
      {
    
    
        id: "03",
        region: "华东"
      },
      {
    
    
        id: "04",
        region: "华南"
      },
      {
    
    
        id: "05",
        region: "华中"
      },
      {
    
    
        id: "06",
        region: "西北"
      },
      {
    
    
        id: "07",
        region: "西南"
      }
    ],
    act_addList: [
      {
    
    
        id: "01", region: "东北地区",
        city: [
          {
    
     id: "0101", name: "白山江源" },
          {
    
     id: "0102", name: "白山市" },
          {
    
     id: "0103", name: "宾县" },
          {
    
     id: "0104", name: "大庆" },
          {
    
     id: "0105", name: "测试1" },
          {
    
     id: "0106", name: "测试2" },
          {
    
     id: "0107", name: "测试3" },
          {
    
     id: "0108", name: "测试4" },
          {
    
     id: "0109", name: "测试5" },
          {
    
     id: "0110", name: "测试6" },
        ]
      },
      {
    
    
        id: "02", region: "华北地区",
        city: [
          {
    
     id: "0201", name: "包头" },
          {
    
     id: "0202", name: "保定" },
          {
    
     id: "0206", name: "测试2" },
          {
    
     id: "0207", name: "测试3" },
          {
    
     id: "0208", name: "测试4" },
          {
    
     id: "0209", name: "测试5" },
          {
    
     id: "0210", name: "测试6" },
        ]
      },
      {
    
    
        id: "03",
        region: "华东地区",
        city: [
          {
    
     id: "0303", name: "开封市" },
          {
    
     id: "3104", name: "安阳市" },
        ]
      },
      {
    
    
        id: "04", region: "华南地区",
        city: [
          {
    
     id: "0401", name: "黑龙江市" },
          {
    
     id: "0407", name: "测试3" },
          {
    
     id: "0508", name: "测试4" },
          {
    
     id: "0609", name: "测试5" },
          {
    
     id: "0710", name: "测试6" },
          {
    
     id: "0711", name: "测试8" },
          {
    
     id: "0712", name: "测试9" },
          {
    
     id: "0713", name: "测试10" },
          {
    
     id: "0714", name: "测试11" },
        ]
      },
      {
    
    
        id: "05",
        region: "华中地区",
        city: [
          {
    
     id: "0501", name: "黑龙江市" }
        ]
      },
      {
    
    
        id: "06",
        region: "西北地区",
        city: [
          {
    
     id: "0603", name: "开封市" },
          {
    
     id: "0604", name: "安阳市" }
        ]
      },
      {
    
    
        id: "07",
        region: "西南地区",
        city: [
          {
    
     id: "0703", name: "开封市" },
          {
    
     id: "0704", name: "安阳市" },
          {
    
     id: "0401", name: "黑龙江市" },
          {
    
     id: "0407", name: "测试3" },
          {
    
     id: "0508", name: "测试4" },
          {
    
     id: "0609", name: "测试5" },
          {
    
     id: "0710", name: "测试6" },
          {
    
     id: "0711", name: "测试8" },
          {
    
     id: "0712", name: "测试9" },
          {
    
     id: "0713", name: "测试10" },
          {
    
     id: "0714", name: "测试11" },
          {
    
     id: "0401", name: "黑龙江市" },
          {
    
     id: "0407", name: "测试3" },
          {
    
     id: "0508", name: "测试4" },
          {
    
     id: "0609", name: "测试5" },
          {
    
     id: "0710", name: "测试6" },
          {
    
     id: "0711", name: "测试8" },
          {
    
     id: "0712", name: "测试9" },
          {
    
     id: "0713", name: "测试10" },
          {
    
     id: "0714", name: "测试11" },
        ]
      },
    ],
    toView: 'inToView01',
  },
  scrollToViewFn: function (e) {
    
    
    var _id = e.target.dataset.id;
    this.setData({
    
    
      toView: 'inToView' + _id
    })
    console.log(this.data.toView)
  }
})

猜你喜欢

转载自blog.csdn.net/qq_40893035/article/details/108518198