javascript - 鼠标悬停在 iframe 上时隐藏自定义光标
问题描述
我正在努力找出如何在 iframe 上隐藏我的自定义光标。
我设计了一个自定义光标,但它在所有网页部分都可以正常工作。但是,当它越过 Vimeo iframe 时,鼠标停留在 iframe 的边缘并显示默认的 Web 浏览器光标。
我认为最简单的方法是在 iframe 上进行鼠标悬停时隐藏自定义光标。
试图通过使用 CSS(当自定义光标在 iframe 上时应用 display:none)和 js 来弄清楚,但没有成功。
这里是codepen中的代码:https ://codepen.io/felixgonzalo/pen/vYOLrVJ
这是代码: JS
let mouseCursor = document.querySelector(".cursor");
let Links = document.querySelectorAll("a");
let logo = document.querySelector(".logo-error");
window.addEventListener('mousemove', cursor);
function cursor(e){
mouseCursor.style.top = e.pageY + "px";
mouseCursor.style.left = e.pageX + "px";
}
Links.forEach(link =>{
if ( link !== logo ){
link.addEventListener("mouseleave", () => {
mouseCursor.classList.remove("link-grow");
});
link.addEventListener("mouseover", () => {
mouseCursor.classList.add("link-grow");
});
}
});
CSS
body{
cursor: none;
}
.cursor{
width: 2rem;
height: 2rem;
border: 2px solid white;
border-radius: 50%;
position: absolute;
transform: translate(-50%, -50%);
transition: all 0.3s ease;
transition-property: background, transform;
transform-origin: 100% 100%;
z-index: 20000;
pointer-events: none;
}
.link-grow{
transform: scale(1.2);
background: white;
mix-blend-mode: difference;
}
a:-webkit-any-link {
cursor: none;
}
.logo-error:hover .cursor{
display: none !important;
}
@media (max-width: 768px){
.cursor {
display: none;
}
}
解决方案
基本上,你需要3样东西:
- 获取
iframe
元素
var iframe = document.querySelector("iframe");
- 添加
mouseover
事件处理程序
iframe.addEventListener("mouseover", function() {
mouseCursor.style.display = 'none';
})
- 添加
mouseleave
事件处理程序
iframe.addEventListener("mouseleave", function() {
mouseCursor.style.display = 'block';
})
现在,只要您将鼠标悬停在 iframe 上,您的自定义光标就会出现hidden
,并且一旦您将鼠标从 iframe 移开,它就会再次可见。
请注意:请注意,我使用querySelector
的是仅返回 FIRST 选择器,因此如果您有许多 iFrame,它将仅在第一个上应用代码。为避免这种情况,您可以使用querySelectorAll
orgetElementsByTagName
循环返回的数组,然后注入事件。
推荐阅读
- python - Python Scipy:RBF插值给出“错误”的结果
- typescript - node_modules/react-native/index.js 中的 React Native SyntaxError: Unexpected token, expected "{" (13:7) on Android Build
- c++ - 是否可以将 C 函数作为回调传递给 OCaml?
- python - python pandas - 如何为每一行创建一个带有条件的列名列表?
- redhat - Red Hat AMQ 中的客户端本地队列
- windows - Windows10 USB 传输模式
- mysql - SQL 查询所有用户和未在同一查询中填写表单的用户
- python - 如果条件不满足,但仍然在带有 for 循环的嵌套 if 语句中打印“if”
- html - 如何在此代码中实现下拉菜单?
- azure - 'Microsoft.Azure.KeyVault.KeyVaultClient' 类型中的 get_SerializationSettings'