刚刚pointer-events在CSS中玩过属性.
我有一个div我希望对所有鼠标事件都不可见,除了:hover.
所以所有点击命令都会通过div它下面的命令,但是div可以报告鼠标是否在它上面.
任何人都可以告诉我是否可以这样做?
HTML:
<div class="layer" style="z-index:20; pointer-events:none;">Top layer</div>
<div class="layer" style="z-index:10;">Bottom layer</div>
Run Code Online (Sandbox Code Playgroud)
CSS:
.layer {
position:absolute;
top:0px;
left:0px;
height:400px;
width:400px;
}
Run Code Online (Sandbox Code Playgroud) 有没有一种方法来设置pointerEvents到none一个Modal?我试图在父母范围之外渲染一个子视图,我能做到这一点的唯一方法是使用一个Modal.忽视pointerEvents孩子似乎不起作用.
<View>
<View style={{flex: 1, backgroundColor: 'red'}}></View>
<Modal
animationType='fade'
transparent={true}
visible={true}
pointerEvents='none'>
<View style={{flex:1, alignItems: 'center', justifyContent: 'center'}} pointerEvents='none'>
</View>
</Modal>
</View>
Run Code Online (Sandbox Code Playgroud) tldr; 我需要一个元素来注册拖放指针事件,但是将click和其他指针事件传递给它后面的元素.
我正在构建一个拖放照片上传功能react-dropzone.我希望它dropzone在整个页面上,所以如果你将文件拖到页面的任何部分,你可以删除它来上传图像.在dropzone当没有文件拖到它是透明的,所以我需要点击它后面的元素来注册.
为了实现这一点,我给了dropzone组件以下样式:
position: fixed;
top: 0;
left: 0;
right: 0;
bottom: 0;
pointer-events: none;
Run Code Online (Sandbox Code Playgroud)
但是,pointer-events: none;导致dropzone无法识别必要的拖放事件.有没有办法识别这些特定的指针事件,同时将其他人(如点击)传递给后面的元素dropzone?
在 iOS 15 上的 Safari 中,已应用容器中的链接在稍后设置为动态pointer-events: none;时不会变得可点击。事实上,在某些情况下确实如此,但这是非常不可预测的。例如,当容器是 an并且链接位于元素内部时,它们确实变得可点击。或者当链接有同级时。我知道这听起来很奇怪,但这是事实。我做了一个演示,所以你可以自己尝试一下:https://stackblitz.com/edit/web-platform-mdhjqs?file =index.htmlpointer-eventsallullibutton
我错过了什么吗?这是 iOS 15 上 Safari 独有的错误吗?
有人可以帮我解释为什么当我点击它们时,下拉菜单中的链接无效吗?也许是因为指针事件?我正在尝试在单击链接或单击关闭按钮后关闭下拉菜单.我添加了一些很酷的东西,比如单击链接时隐藏父容器.
有很多选择:
使用:focus但是当使用焦点时,下一个悬停在下拉列表中不会触发下拉列表.
:active在容器上使用并pointer-events仅指向活动链接,但指针事件是错误的
:target但具有相同的问题:焦点,不会触发第二个胡佛.body {
padding: 20px;
}
.container {
border: 1px solid lime;
padding: 10px;
width: 200px;
}
.test1 {
display: none;
border: 1px dashed orange;
background: green;
padding: 10px;
pointer-events: none;
}
.container:hover .test1 {
display: inline-block;
}
.container:hover .test1:active {
display: none;
}
a {
pointer-events: auto;
color: lime;
font-weight: bold;
}Run Code Online (Sandbox Code Playgroud)
<ul class="container">
Drop down menu
<li class="test1">
<a class="dropdown" href="#">X Close</a>
<ul class="content">
CLOSE THIS CONTENT …Run Code Online (Sandbox Code Playgroud)我有这支笔:
https://codepen.io/anon/pen/eyKeqK
如果你在触摸屏设备上尝试(fe访问手机上的笔),你会注意到当你拖动时,白光(小球体)只移动一点点然后停止工作.
移动的逻辑在pointermove事件处理程序中.它使用鼠标在桌面上工作正常,而不是触摸.
我们如何解决这个问题,以便在触摸拖动时光线不断移动(不仅仅是片刻),作为奖励我们如何在拉下时防止它刷新页面?
这是笔的代码:
HTML(Slim):
/! Made with http://github.com/trusktr/infamous
script src="https://cdn.rawgit.com/trusktr/e37dbc24c51b9d3e2f9e508e75cf8f99/raw/2a3fee4ee506a05cc4ac509f592f0c3af1ddfed4/infamous-mixed-mode-3.js"
script src="https://unpkg.com/tween.js@16.6.0/src/Tween.js"
i-scene experimental-webgl="true" id="scene" TODO-perspective="800" backgroundColor="0 0 0" backgroundOpacity="0" style="perspective: 800px" shadowmap-type="pcfsoft"
i-ambient-light color="#404040" intensity="1"
i-dom-plane id="bg" sizeMode="proportional proportional" size="1 1 0"
i-node id="button-container" position="0 0 6" size="600 31 0" align="0.5 0.5 0" mountPoint="0.5 0.5 0"
- for n in (0..4)
i-dom-plane sizeMode="literal proportional" size="100 1 0" align="#{n*0.25} 0 0" mountPoint="#{n*0.25} 0 0"
button button #{n+1}
i-point-light id="light" color="white" position="300 300 120" …Run Code Online (Sandbox Code Playgroud) 我在可滚动区域中有一堆子 div,如下所示:
<div style='overflow: scroll;'>
<div id='a' />
<div id='b' />
<div id='c' />
...
</div>
Run Code Online (Sandbox Code Playgroud)
我监听每个子项上的pointerdown 事件,当事件触发时,我在文档上设置pointermove 处理程序。例如:
const pointerdownHandle = e => {
e.target.releasePointerCapture(e.pointerId)
document.addEventListener('pointermove', pointermoveHandle)
document.addEventListener('pointerup', pointerupHandle)
}
const pointermoveHandle = e => { ... }
const pointerupHandle = {
document.removeEventListener('pointermove', pointermoveHandle)
document.removeEventListener('pointerup', pointerupHandle)
}
document.getElementById('a').addEventListener('pointerdown', pointerdownHandle)
Run Code Online (Sandbox Code Playgroud)
这在桌面和 iOS Safari 上都非常有效。然而在 Android Chrome 上,pointercancel 事件几乎立即触发,从而破坏了一切。
这似乎是预期的行为: “当浏览器确定不可能再有任何指针事件时,将触发pointercancel事件,或者如果在触发pointerdown事件后,然后使用指针通过平移来操作视口,缩放或滚动。”
推荐的解决方案是将 css 属性“touch-action: none”应用于父元素。这有效。但不幸的是,这也会中断滚动,因为现在触摸操作被忽略。
我尝试在pointerdown事件触发后以编程方式应用css属性,但这不起作用。将 PreventDefault / stopPropagation 添加到pointermoveHandle 也不会。
有人能解决这个问题吗?如何在不禁用父元素滚动的情况下阻止 pointcancel 事件触发?
(我意识到我可以依靠触摸事件,但是支持pointerenter和pointerleave的指针事件使用起来更加简单和干净......)
与-ms-touch-action其他浏览器相同的是什么?
我试图覆盖包含div的指针事件属性.到目前为止,除了IE 11之外,它可以工作.据说,指针事件属性被添加到IE 11.出于某种原因,它不会覆盖它.
.divstyle {
pointer-events: none;
}
.buttonstyle {
pointer-events: auto;
}
<div class="divstyle">
<table>
<tr><td>
<input type="button" class="buttonstyle" value="test">
</td></tr>
<tr><td>
<!-- A BUNCH OF CONTENT THAT I DON'T WANT TO HAVE POINTER EVENTS -->
</td></tr>
<tr><td>
<!-- AND ON AND ON -->
</td></tr>
</table>
</div>
Run Code Online (Sandbox Code Playgroud)
整个div不允许指针事件,包括按钮.我认为既然div根本没有事件,IE就支持属性指针事件,但是当我明确地设置子事件有事件时,由于某种原因它不会允许它.谢谢您的帮助!
“click”事件是一个鼠标事件,在 mousedown 和 mouseup 事件触发后触发。
现在指针事件有更广泛的用例,所以我想知道指针事件是否也有相应的“点击”事件?
谢谢。安迪
pointer-events ×10
css ×6
html ×5
javascript ×5
android ×1
click ×1
css3 ×1
dom-events ×1
html5 ×1
ios15 ×1
mouseevent ×1
react-native ×1
safari ×1
touch ×1