You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				
			
		
		
		
			
			
			
				
					
				
				
					
				
			
		
		
	
	
							72 lines
						
					
					
						
							1.8 KiB
						
					
					
				
								let lastY = 0 // 上一次滚动的位置
							 | 
						|
								let scale = 750 / wx.getSystemInfoSync().windowWidth // rpx转化比例
							 | 
						|
								Component({
							 | 
						|
								  options: {
							 | 
						|
								    multipleSlots: true
							 | 
						|
								  },
							 | 
						|
								  data: {
							 | 
						|
								    scrollTop: 0,
							 | 
						|
								    translateHeight: 0, // 平移距离
							 | 
						|
								    state: -1,
							 | 
						|
								    lastY: 0,
							 | 
						|
								    enablePullDown: true
							 | 
						|
								  },
							 | 
						|
								  properties: {
							 | 
						|
								    // 触发下拉刷新的距离
							 | 
						|
								    upperDistance: {
							 | 
						|
								      type: Number,
							 | 
						|
								      value: 150
							 | 
						|
								    }
							 | 
						|
								  },
							 | 
						|
								  methods: {
							 | 
						|
								    // 监听滚动,获取scrollTop
							 | 
						|
								    onPageScroll (e) {
							 | 
						|
								      this.data.scrollTop = e.scrollTop
							 | 
						|
								    },
							 | 
						|
								    touchStart (e) {
							 | 
						|
								      this.data.lastY = e.touches[0].clientY
							 | 
						|
								      if (this.data.scrollTop === 0) {
							 | 
						|
								        this.data.enablePullDown = true
							 | 
						|
								      } else {
							 | 
						|
								        this.data.enablePullDown = false
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								    touchMove (e) {
							 | 
						|
								      let clientY = e.touches[0].clientY
							 | 
						|
								      let offset = clientY - this.data.lastY
							 | 
						|
								      if (this.data.scrollTop > 0 || offset < 0) return
							 | 
						|
								      this.data.translateHeight += offset
							 | 
						|
								      this.data.state = 0
							 | 
						|
								      this.data.lastY = e.touches[0].clientY
							 | 
						|
								      if (this.data.enablePullDown) {
							 | 
						|
								        if (this.data.translateHeight - this.data.scrollTop * scale > this.data.upperDistance) {
							 | 
						|
								          this.data.state = 1
							 | 
						|
								        }
							 | 
						|
								        this.setData({
							 | 
						|
								          translateHeight: this.data.translateHeight > 80 ? 80 : this.data.translateHeight,
							 | 
						|
								          state: this.data.state
							 | 
						|
								        })
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								    touchEnd (e) {
							 | 
						|
								      if (this.data.translateHeight - this.data.scrollTop * scale > this.data.upperDistance) {
							 | 
						|
								        if (this.data.enablePullDown) {
							 | 
						|
								          this.setData({
							 | 
						|
								            translateHeight: 80,
							 | 
						|
								            state: 2
							 | 
						|
								          })
							 | 
						|
								          this.triggerEvent('scrolltoupper')
							 | 
						|
								        }
							 | 
						|
								      } else if (this.data.scrollTop <= 0) {
							 | 
						|
								        this.stopRefresh()
							 | 
						|
								      }
							 | 
						|
								    },
							 | 
						|
								    //  停止刷新
							 | 
						|
								    stopRefresh () {
							 | 
						|
								      this.setData({
							 | 
						|
								        translateHeight: 0,
							 | 
						|
								        state: -1
							 | 
						|
								      })
							 | 
						|
								    }
							 | 
						|
								  }
							 | 
						|
								})
							 |