当前位置: 首页 > news >正文

天龙八部私服怎么做网站 今日头条

天龙八部私服怎么做网站, 今日头条,安卓应用,修改wordpress前端React Native中防止滑动过程中误触 在使用React Native开发的时,当我们快速滑动应用的时候,可能会出现误触,导致我们会点击到页面中的某一些点击事件,误触导致页面元素响应从而进行其他操作,表现出非常不好的用户体验。 一、问题…

React Native中防止滑动过程中误触

在使用React Native开发的时,当我们快速滑动应用的时候,可能会出现误触,导致我们会点击到页面中的某一些点击事件,误触导致页面元素响应从而进行其他操作,表现出非常不好的用户体验。

在这里插入图片描述

一、问题背景

常见的情形是长列表中,在滑动过程中可能会出现误触到列表中的某一项的情形,对于用户使用非常不好的体验。
如下列表组件中,就会存在滑动过程中产生误触的情况。

import React from 'react';
import { StyleSheet, Text, SafeAreaView,ScrollView,  View, TouchableOpacity, StatusBar,
} from 'react-native';const App = () => {const list = Array.from(Array(100).keys());const onPress = (e) => {alert(1);};return (<SafeAreaView style={styles.container}><ScrollView style={styles.scrollView}>{list.map((item) => {return (<TouchableOpacity onPress={onPress}><View style={styles.containerView}><Text style={styles.text}>{item}+ item</Text></View></TouchableOpacity>);})}</ScrollView></SafeAreaView>);
};const styles = StyleSheet.create({container: { flex: 1, paddingTop: StatusBar.currentHeight },scrollView: { marginHorizontal: 20 },text: { fontSize: 1 },containerView: { backgroundColor: 'pink', marginTop: 20, height: 50 },
});
export default App;

上面长列表,在滚动的过程中可能会出现误触的问题。

二、解决思路

我们应该如何处理这种情形,可以考虑从点击事件上入手,考虑根据距离的移动来进行组织是否响应点击事件
通过查看官方文档,我们能够发现点击时间在点击按下和抬起的过程中有一个过程回调,我们就可以利用这个回调进行处理误触了,有兴趣的小伙伴可以看看这块官方说明

由于点击事件执行过程原理

  • onPressIn 在按压时被调用。

  • onPressOut 在按压动作结束后被调用。
    在按下 onPressIn 后,将会出现如下两种情况的一种:

    用户移开手指,依次触发onPressOut 和onPress事件。
    按压持续 500 毫秒以上,触发onLongPress 事件。(onPressOut 在移开手后依旧会触发。)

在这里插入图片描述

可以通过监听点击事件的方式来监听按钮点击,那我们来简单实现一个避免误触的方案
其中的核心原理就是点击事件的整个过程,总结来说就是下面的三个点击过程

  onPressOut={(event) => {const [startX, startY] = [event.nativeEvent.pageX,event.nativeEvent.pageY,];const currentTime = new Date().getTime();const shouldReject =(Math.abs(pressInPointRef.current.startX - startX) >pointDistance ||Math.abs(pressInPointRef.current.startY - startY) >pointDistance) &&(currentTime - pressInTime.current) < pointMinTimeSpace;console.log('shouldReject', shouldReject);shouldReject && event?.preventDefault?.();}}onPress={(event) => {if (event?.isDefaultPrevented?.()) return;onclick && onclick();}}onPressIn={(event) => {pressInPointRef.current.startX = event.nativeEvent.pageX;pressInPointRef.current.startY = event.nativeEvent.pageY;pressInTime.current = new Date().getTime();}}

当发生触摸时,通过onPressIn事件记录位置和获取事件戳,当指头触摸弹起时,通过onPressOut事件记录并且对比按下时的位置和按下时的时间,是否满足响应当前点击的条件,如果不满足响应,则使用event?.preventDefault?.()阻止其继续响应,最后根据onPress事件中if (event?.isDefaultPrevented?.()) return;判断该如何响应这次触摸点击,这就是整个过程。

  • pressInTime
    调整按压时间区间,在按下时和抬起间隔小于该时间,则认为是误触,这个和距离区间(pointDistance)一起确定是否误触

  • pointDistance
    调整按下和抬起时之间的距离,在按下时和抬起间隔小于该距离,则认为是误触,这个和按压时间(pressInTime)区间一起确定是否误触

  • 调整显示组件
    其中TouchableOpacity组件可以更换为能够响应点击事件的任何组件,下面是官方列出的被引用到的组件,都能够使用这种方式处理误触。

     ButtonPanResponderPressableScrollViewTextTextInputTouchableHighlightTouchableOpacityTouchableNativeFeedbackTouchableWithoutFeedbackView
    

针对以上情况,能够将其应用到业务不同的误触情况下,下面是整理之后,完整的代码,根据以上情况可以再次进行组件封装,适配自己业务组件的调整。

const App = () => {const list = Array.from(Array(100).keys());const pressInPointRef = useRef({ startX: 0, startY: 0 });const。pressInTime = useRef(0);const pointDistance = 100;const pointMinTimeSpace = 1000;const onclick = () => {console.log('按钮被点击...');alert('按钮被点击...')};return (<SafeAreaView style={styles.container}><ScrollView style={styles.scrollView}>{list.map((item) => {return (<TouchableOpacityonPressOut={(event) => {const [startX, startY] = [event.nativeEvent.pageX,event.nativeEvent.pageY,];const currentTime = new Date().getTime();const shouldReject =(Math.abs(pressInPointRef.current.startX - startX) >pointDistance ||Math.abs(pressInPointRef.current.startY - startY) >pointDistance) &&(currentTime - pressInTime.current) < pointMinTimeSpace;console.log('shouldReject', shouldReject);shouldReject && event?.preventDefault?.();}}onPress={(event) => {if (event?.isDefaultPrevented?.()) return;onclick && onclick();}}onPressIn={(event) => {pressInPointRef.current.startX = event.nativeEvent.pageX;pressInPointRef.current.startY = event.nativeEvent.pageY;pressInTime.current = new Date().getTime();}}><View style={styles.containerView}><Text style={styles.text}>{item}+ line</Text></View></TouchableOpacity>);})}</ScrollView></SafeAreaView>);
};

三、总结整理

  • 解决这次触摸,主要是使用点击事件本身的一个响应机制,在中间通过记录状态值的方式去处理
  • 使用到的方法涉及到按下时、抬起时、按下这三个过程
  • 通用功能组件需要进行封装,以达到业务功能上的适配

在这里插入图片描述

http://www.mnyf.cn/news/609.html

相关文章:

  • 农博园网站建设投标书重庆百度
  • 徐州公司做网站seo工资水平
  • 备案网站怎么做抖音权重查询
  • wordpress文章标题源码插件网站seo排名培训
  • 网站开发外包哪家好班级优化大师怎么加入班级
  • 建站开发工具chrome手机安卓版
  • 信息门户网站是什么公司快速建站
  • 企业网站管理系统asp电商网站平台搭建
  • 网站里+动效是用什么做的网店代运营骗局流程
  • 建自己的网站性能优化大师
  • 做日本ppt的模板下载网站有哪些营销策略主要包括哪些
  • 哪个网站可以做免费请帖百度网页版主页
  • 门户网站建设招标文件在线视频用什么网址
  • 网站建设 蔬菜配送深圳seo推广培训
  • 建工行业建设标准网站网络营销属于哪个专业
  • 温州瓯海区营销型网站建设搜索引擎关键词排名
  • 淘宝店网页制作教程青岛的seo服务公司
  • 网站建设中网站制作包括哪些内容百度关键词网站排名优化软件
  • 做公益网站的说明营销型网站建设的5大技巧
  • 重庆营销型网站网络营销推广案例
  • php wordpress 等优化搜索引擎的方法
  • 山东住房和城乡建设厅网站电话公司网站免费建站
  • 在家做网站建设网站广告调词软件
  • seo网站推广助理优化网站seo公司
  • 做网站流量怎么赚钱吗昆明百度推广开户费用
  • 怎么做免费的产品图片网站市场调研报告1000字
  • 商汇通网站长沙网络推广平台
  • 医院网站规划方案石家庄网站建设seo
  • 制作简易网站模板沧州网站建设公司
  • 广东网站制作公司游戏推广员上班靠谱吗