Home > Article > Web Front-end > vue triggers mobile scroll bar event
This time I will bring you vue to trigger the mobile scroll bar event. What are the precautions for vue to trigger the mobile scroll bar event? The following is a practical case, let's take a look.
Be sure to note that all scroll events must meet this condition, and the same is true for horizontal scroll bars.
As long as the width of the child element is greater than The width of the parent element is fine. (The next article will talk about how to implement a horizontal scroll bar)
Get to the point! ! !
Let’s first look at how to analyze this pull-down refresh.
Three events on the mobile side to be used: touchstart (finger pressed), touchmove (finger moved), touchend (finger left)
Pull-down refresh is (touchstart => touchmove (Move down) =>touchend) a process
General idea:
Drop-down is mainly related to the finger touching the y-axis point
1. Record the coordinate point where the finger presses the y-axis
2. Record the distance the finger moves when it moves (note: to judge whether the finger moves up or down, up Shifting means scrolling)
3. Start the pull-down refresh event
Look at the code:
In vue, you need to register the event in methods, in Bind to the parent element. Everyone here should be building projects using vue-cli!
If not, I will give you a link later, which contains the already built project structure. Contains the source code and demo of this plug-in. 1
<template> <p class="parent"> <p class="child"></p> </p> </template> <script> export default { data(){ return { top: 0, startY: 0, // 保存 y轴点的位置 touching: false, // 代表当前是否处于 下拉刷新行为的开关,也就是当属于滚动行为时,就要退出该事件机制 } }, methods: { touchStart(e) { // e代表该事件对象,e.targetTouches[0].pageY可以拿到手指按下的 y轴点 this.startY = e.targetTouches[0].pageY // 开启下拉刷新状态 this.touching = true }, touchMove(e) { //这个 touchMove,只要页面在动都会发生的,所以 touching就起作用了 // 如果 touching为false,说明这个正在移动的页面不是我们想要的下拉刷新,有可能是用户随意拉了一下页面而已,或者其他 if(!this.touching) return // 获取移动的距离 let diff = e.targetToc=uches[0].pageY - this.startY //判断是向上拉还是向下拉 if(diff >0) { e.preventDefault() } else { return } //这个this.top要对应绑定到该元素的transform: translateY(+top+ 'px')上,不然是无法拉动的 // 因此这里还要对偏移高度做一下处理,直接设置diff +(this.state === 2 ? 40 : 0) 太快了,因为拉取幅度太大 // 让diff*0.25这样子就差不多了 this.top = Math.floor(diff*0.25) + (this.state === 2 ? 40 : 0) if(this.top >= 40){ this.state = 1 //代表正在拉取 } else { this.state = 0 // 代表初始转态 } }, touchEnd(e) { this.touching = false if(this.state === 2) { this.top = 40 return } // 判断抬起时的高度,是大于40 就开启刷新 if(this.top >= 40) { this.refresh() } else { this.state = 0 this.top = 0 } }, refresh() { this.state = 2 this.top = 40 const self = this // 这里可以调用父组件的方法去请求刷新接口 this.$emit('getRefresh', function(self){ //传个回调过去,请求完数据就复原 self.state = 0 self.top = 0 }) } } } </script>
That’s it. Of course, it can’t be used directly now. It must be used in conjunction with your actual business logic. ,
I believe you have mastered the method after reading the case in this article. For more exciting information, please pay attention to other related articles on the php Chinese website!
Recommended reading:
react application development scaffolding use case
Vue2.0 configuration mint-ui from scratch ( Code attached)
The above is the detailed content of vue triggers mobile scroll bar event. For more information, please follow other related articles on the PHP Chinese website!