(web端实现方法详见我的这篇博客-----------> )
现在我们写好了这个页面
html代码部分
<View className='main'>
<View className='inner' id='app'>
<View className='inner2'>add</View>
<Text>ddd</Text>
</View>
</View>
{/* main是主节点,长宽都是屏幕尺寸 */}
<View className='main' onClick={this.cancel.bind(this)}>
<View className='inner'>
<View className='inner2'>add</View>
<Text>ddd</Text>
</View>
</View>
切记绑定事件一定要绑定到外部的元素上(因为这个事件监测是全屏监测)
// ts版
searchId(currentNode): void {
let nowList: string[] = this.state.idList;
nowList.push(currentNode.uid);
this.setState({ // 修改idList ,如果您使用vue的话就直接修改this.idList即可
idList: nowList
});
if (currentNode.childNodes.length) {
for (let i = 0; i < currentNode.childNodes.length; i++) {
this.searchId(currentNode.childNodes[i])
}
}
}
// js版
searchId(currentNode) {
let nowList = this.state.idList;
nowList.push(currentNode.uid);
this.setState({ // 修改idList ,如果您使用vue的话就直接修改this.idList即可
idList: nowList
});
if (currentNode.childNodes.length) {
for (let i = 0; i < currentNode.childNodes.length; i++) {
this.searchId(currentNode.childNodes[i])
}
}
}
现在,我们所有的id信息都储存在 idList当中去了
然后剩下的判断步骤就和web端的一模一样了
// ts版
cancel(e: TaroEvent<any>) {
// vue直接书写this.idList
if (!this.state.idList.includes(e.target.id)) {
console.log('ok'); // 里面执行符合条件的方法,最常见的就是关闭小窗口
}
}
// js版
cancel(e) {
// vue直接书写this.idList
if (!this.state.idList.includes(e.target.id)) {
console.log('ok'); // 里面执行符合条件的方法,最常见的就是关闭小窗口
}
}
本篇文章基于taro+react+ts,如果您不是使用上面的框架(或语言或打包工具)请麻烦您稍微切换一下!