我偶然发现了一个与 SwiftUI 相关的事件冒泡问题,ScrollView并且已经能够将其简化为一小段代码。请参阅以下内容:
struct ContentView: View {
var body: some View {
ScrollView() {
Rectangle()
.fill(Color.red)
.frame(width: 200, height: 200)
.onTapGesture {
print("Rectangle onTapGesture")
}
}
.onTapGesture {
print("ScrollView onTapGesture")
}
}
}
Run Code Online (Sandbox Code Playgroud)
在 Rectangle 外部敲击时,我在控制台中看到:
ScrollView onTapGesture
但是,当点击矩形时,我看到打印了两行:
ScrollView onTapGesture
Rectangle onTapGesture
ScrollView 似乎也在响应它的孩子的事件......这不应该发生,对吧?我能做些什么来阻止这种情况?
编辑:更疯狂的是,这两行并不总是以相同的顺序出现!我已经看到它们在重新启动应用程序时交换了代码,而没有对代码进行任何更改。
我的目标是在 ScrollView 上使用 onTapGesture 来捕捉“解除”点击,即没有被任何 ScrollView 的孩子捕捉/处理的点击。
非常感谢!
长期以来,我一直将其视为“绝对真理”:
\nlet img = new Image();\nimg.src = \'... some url ...\'\nimg.onload = function() { console.log(\'onload\') }\nRun Code Online (Sandbox Code Playgroud)\n是错误的,因为.onload处理程序可能不会被调用。.addEventListener(\'load\', function() ... )设置后使用附加处理程序也是如此.src:它可能不起作用。(请参阅此示例答案,说明:“...在为 src 属性分配值之前添加事件侦听器...”)
这个问题的背景:我在流行的 p5.js 库中找到了一个.src调用之前设置的示例,特别是在这里。我想解决这个问题并提交 PR。但是,我还想创建一个单元测试,该测试在当前代码(调用之前的设置)中失败,并在我的修复中通过。.addEventListener.src =.addEventListener
然而!我还没能真正看到.src之前的设置在什么情况下实际上失败了......!
这是一些代码来演示我的意思:
\n(function f() {\n let i = new Image();\n i.src = \'//placekitten.com/10/10\';\n document.querySelector(\'body\').appendChild(i);\n \n let out = 0;\n for(let i = 0; …Run Code Online (Sandbox Code Playgroud) 我知道<br>标签是自动关闭的,即它们通常写为<br>或<br />
出于好奇,有朋友尝试了一下,结果在Google Chrome中,和iea<br>b</br>c一样,变成了换行符。a<br />b<br />c</br>
我们尝试了一个不存在的结束标签,即</potato>没有添加换行符(或任何内容)。但他们</br>做到了。为什么?