首页 > 其他分享 >基于taro组件scrollView实现pickview

基于taro组件scrollView实现pickview

时间:2023-08-17 15:36:29浏览次数:47  
标签:pickview const 40 scrollView props taro scrollTop setScrollTop 城店

import { useEffect,useState } from "react";
import { View, Image, Text,ScrollView } from '@tarojs/components'
 
 
import './index.less'
 
let timeOut:any = null
let touch = false
let value = {}
let length = 0
const Index = (props) => {
  const [scrollTop, setScrollTop] = useState(0)
  const [data, setData] = useState(['aZA0001 未来科技城店','bZA0001 未来科技城店','cZA0001 未来科技城店','dHZA0001 未来科技城店','eHZA0001 未来科技城店','fHZA0001 未来科技城店','gHZA0001 未来科技城店','hHZA0001 未来科技城店','iHZA0001 未来科技城店','jHZA0001 未来科技城店','kHZA0001 未来科技城店','lHZA0001 未来科技城店'])
 
 
  useEffect(() => {
    length = props.pickerData
  }, [])
  const onScroll = (e) => {
    if(e.detail.scrollTop<0){
      setScrollTop(0)
      return
    }
    if(e.detail.scrollTop>40 * (length - 1)){
      setScrollTop(40 * (length - 1))
      return
    }
    setScrollTop(e.detail.scrollTop)
    if(!touch) {
      clearTimeout(timeOut)
      timeOut = setTimeout(() => {
        setScroll()
      },100)
    }
  }
 
  const handleTouchStart = () => {
    touch = true   
  }
 
  const handleTouchEnd = () => {
    setScroll()
    touch = false   
  }
 
  const setScroll = () => {
      if(scrollTop < 0){
        setScrollTop(0)
        return
      }
      if(scrollTop > 40 * (length - 1)){
        setScrollTop(40 * (length - 1))
        return
      }
      if(scrollTop%40>20){
        setScrollTop(scrollTop-(scrollTop%40)+40)
      }else{
        setScrollTop(scrollTop-(scrollTop%40))
      }
  }
 
  return (
    <View 
      className='Picker'
    >
      <View className='Picker-button'  onClick={() => {props.onClose()}}>
        <Image src={require('@/assets/img/down.png')} className='Picker-button-img'></Image>
      </View>
      <View className='Picker-title flex-between'>
        <View className='Picker-title-button'>
          <Text className='Picker-title-button-text' onClick={() => {props.onClose()}}>取消</Text>
        </View>
        <Text className='Picker-title-text'>请选择{props.title}</Text>
        <View className='Picker-title-button'>
          <Text className='Picker-title-button-text Picker-title-button-affirm' onClick={() => { props.onChange(value) }}>确认</Text>
        </View>
      </View>
      <View className='Picker-content' 
        style={{
          height: process.env.TARO_ENV === 'rn' ? 200 : '200px'
        }}
      >
        <ScrollView scrollTop={scrollTop} scrollY className='Picker-content' onScroll={(e)=>{onScroll(e)}} onTouchEnd={() => handleTouchEnd()} onTouchStart={(e) => handleTouchStart()}
          style={{
            height: process.env.TARO_ENV === 'rn' ? 200 : '200px'
          }}
        >
          <View
            style={{
              height: process.env.TARO_ENV === 'rn' ? 80 : '80px'
            }}
          ></View>
          {
            props.pickerData.map((item, index) => {
              if(scrollTop === index*40){
                value = item
              }
              return(
                <View className='Picker-content-item' 
                  style={{
                    height: process.env.TARO_ENV === 'rn' ? 40 : '40px',
                  }}
                  key={index}
                >
                {
                  props.noValue ? 
                  <Text className='Picker-content-item-text'
                    style={{
                      color: scrollTop === index*40? '#333333':'#9B9B9B'
                    }}
                  >{`${item.label}`}</Text>
                  :
                  <Text className='Picker-content-item-text'
                    style={{
                      color: scrollTop === index*40? '#333333':'#9B9B9B',
                    }}
                  >{`${item.value} ${item.label}`}</Text>
                }
              </View>
              )
            })
          }
          <View
            style={{
                height: process.env.TARO_ENV === 'rn' ? 80 : '80px'
              }}
          ></View>
        </ScrollView>
        <View  className='Picker-center'
          style={{
            height: process.env.TARO_ENV === 'rn' ? 40 : '40px',
            position: 'absolute',
            top: process.env.TARO_ENV === 'rn' ? 80 : '80px',
            backgroundColor:'#F9F9F9',
            zIndex: -1
          }}
        ></View>
      </View>
    </View>
  )
}
 
export default Index; 

标签:pickview,const,40,scrollView,props,taro,scrollTop,setScrollTop,城店
From: https://blog.51cto.com/u_16229162/7123171

相关文章

  • P9342 Bitaro's Travel 题解
    模拟赛做到的题,赛后看了Y2hlbnlpa2Fp的题解,感觉没讲清楚,这里做下补充,提供自己的理解。基本思路:对每个\(A_i\)的答案进行预处理,对于每个询问,只需要找到第一个到达的景点即可。那么如何预处理每个点的答案呢?有一条很重要的性质:最多转向\(\log{X}\)次。要证明这个结论,先放......
  • 使用StoryBoard设置Scrollview的横向滚动不用一行代码
    1).创建一个空工程Single类型的工程,然后打开故事版(StoryBoard)在ViewController上添加scrollview2).然后对scrollview添加约束,上下左右全部都是0就可以(注意:在添加上下左右约束的时候一定要取消Constraintomargins,否则添加完的约束会出现左右各缺少20像素的边距)3).添加完......
  • wpf ScrollViewer 滚动动画
    wpfScrollViewer滚动动画:<Windowx:Class="WpfTest.FloatTextWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d=&qu......
  • taro框架写小程序注意点总结
    1、图片标签用<image/>而 非<img/>。2、设置图片大小时要写明具体的宽高,这里的图片不会像一般浏览器一样,height:auto;代表图片等比自适应高度。3、在转成小程序后,每个标签,包括span标签,也会被单独放在一个属性为block的view中,所以在用vue写的时候简化代码标签。4、在用@t......
  • WPF 在ScrollViewer控件内部的Slider控件无法触摸滑动
    WPF中在ScrollViewer控件内部的Slider控件无法触摸滑动,是由于ScrollViewer控件默认设置了IsManipulationEnabled为True。<ScrollViewerx:Name="ScrollViewer1"><Slider></Slider></ScrollViewer>WPFScrollViewer的IsManipulationE......
  • Taro 小程序扫二维码跳转到指定页面
    小程序扫码登录,需要在微信小程序开发管理->开发设置->扫普通链接二维码打开小程序去添加对应的链接,然后根据链接动态动态生成二维码,然后使用微信扫码的即可跳转到小程序指定页面,具体添加链接方式,请自行百度这里主要介绍两个东西1.Taro小程序下根据链接动态生成二维码2.扫码跳......
  • Taro 小程序自定义热门城市选择页
    先上一下大致效果由于业务需要一个单独全国城市筛选页面,然后就网上找了一波,发现没有特别合适的,于是就手动撸一个,需要当前页面具备以下功能:1.定位当前所在城市2.展示热门城市信息3.清空当前城市选择4.支持本地快捷搜索5.列表数据支持分页展示(主要是城市数据量太大,页面渲染......
  • taro框架使用经验
    就是京东那个taro框架1. taro3.x的Picker(2023-7-20)默认会报错 TypeError:Cannotreadpropertiesofundefined(reading'split')<Pickermode='date'onChange={this.onDateChange}><ViewclassName='picker'>当前选择:{this.......
  • 直播平台源代码,如何截取scrollView里面的图片
    直播平台源代码,如何截取scrollView里面的图片 -(UIImage*)captureScrollView:(UIScrollView*)scrollView{  UIImage*image=nil;  UIGraphicsBeginImageContext(scrollView.contentSize);  {    CGPointsavedContentOffset=scrollView.contentOffs......
  • 一文帮你搞定H5、小程序、Taro长列表曝光埋点
    对于很多前端同学来说,“埋点”常常是一个不愿面对却又无法逃避的话题。为什么这么说呢,相信很多前端同学都深有体会:首先埋点这个事基本是前端“独享”的,服务端基本不太涉及;其次添加埋点,往往看起来很简单但实际做起来很麻烦,很多时候为了获取一些埋点需要的信息甚至要对已经写好的代......