DOM 更改停止触摸事件侦听器
DOM changes stop touch event listeners
我在 DOM 更改时停止工作的 React 触摸事件处理有问题。我有一个带有 onTouchMove
处理程序的父项。如果我在该元素上方开始我的触摸移动,并且在触摸移动期间消失的子元素将停止调用我的处理程序。
我在那里转载:https://codepen.io/anon/pen/pmRvmB?editors=0110#0
(要测试触摸事件,您需要使用响应式设计模式并在 Chrome 或 Firefox 中启用触摸事件)
父级 div
(绿色)有 onTouchMove
处理程序,如果您在蓝色子级 div
之外开始触摸,一切正常,但如果您在蓝色 [=13] 中启动它=],当这个消失时(当你的光标 x
超过代码中的某个阈值时)触摸处理程序停止被调用。
这是重现此问题的相应 JS 代码:
class TodoApp extends React.Component {
constructor(props) {
super(props);
this.onTouchMove = this.onTouchMove.bind(this);
this.state = {
touchCurrentX: 0
}
}
onTouchMove(ev) {
console.log('onTouchMove');
const x = ev.touches.item(0).screenX;
this.setState({touchCurrentX: x});
}
render() {
const child = this.state.touchCurrentX < 600 ? React.createElement('div', {key: 0, id: 'child'}, []) : null;
const debug = React.createElement('span', {key: 1}, this.state.touchCurrentX);
return React.createElement('div', {id: 'parent', onTouchMove: this.onTouchMove}, [child, debug]);
}
}
ReactDOM.render(React.createElement(TodoApp, {}, []), document.querySelector("#app"))
有没有办法让我的处理程序在子元素消失时仍然被调用?
实现此目的的最简单方法是让触摸事件通过 children 落到 parent 上。只需将 style: { pointerEvents: "none" }
添加到 child 道具或将其添加到您的 CSS。然而,这不是一个完美的解决方案。一些 children 可能需要他们的指针事件和 IE 可能 object 到 CSS 属性.
我在 DOM 更改时停止工作的 React 触摸事件处理有问题。我有一个带有 onTouchMove
处理程序的父项。如果我在该元素上方开始我的触摸移动,并且在触摸移动期间消失的子元素将停止调用我的处理程序。
我在那里转载:https://codepen.io/anon/pen/pmRvmB?editors=0110#0
(要测试触摸事件,您需要使用响应式设计模式并在 Chrome 或 Firefox 中启用触摸事件)
父级 div
(绿色)有 onTouchMove
处理程序,如果您在蓝色子级 div
之外开始触摸,一切正常,但如果您在蓝色 [=13] 中启动它=],当这个消失时(当你的光标 x
超过代码中的某个阈值时)触摸处理程序停止被调用。
这是重现此问题的相应 JS 代码:
class TodoApp extends React.Component {
constructor(props) {
super(props);
this.onTouchMove = this.onTouchMove.bind(this);
this.state = {
touchCurrentX: 0
}
}
onTouchMove(ev) {
console.log('onTouchMove');
const x = ev.touches.item(0).screenX;
this.setState({touchCurrentX: x});
}
render() {
const child = this.state.touchCurrentX < 600 ? React.createElement('div', {key: 0, id: 'child'}, []) : null;
const debug = React.createElement('span', {key: 1}, this.state.touchCurrentX);
return React.createElement('div', {id: 'parent', onTouchMove: this.onTouchMove}, [child, debug]);
}
}
ReactDOM.render(React.createElement(TodoApp, {}, []), document.querySelector("#app"))
有没有办法让我的处理程序在子元素消失时仍然被调用?
实现此目的的最简单方法是让触摸事件通过 children 落到 parent 上。只需将 style: { pointerEvents: "none" }
添加到 child 道具或将其添加到您的 CSS。然而,这不是一个完美的解决方案。一些 children 可能需要他们的指针事件和 IE 可能 object 到 CSS 属性.