按下按键时禁用悬停
Disable hover when key pressed
我实现了一个自定义下拉菜单,当我通过键盘移动时遇到了问题:悬停也可以,但我不知道如何禁用它。我已将我的代码粘贴到此处 http://jsfiddle.net/4o0bcv1d/,但我的代码在这里工作正常。当我将代码复制到 index.html - 当我通过键盘移动时,悬停再次起作用。
我该如何解决?
var doc = document;
var keydown_count = -1;
var dropdown_content = doc.querySelector('.dropdown-content');
var dropdown_items = doc.querySelectorAll('.dropdown-item');
var dropdown_items_length = dropdown_items.length;
var clear_navigation_hover = function () {
for (var i = 0; i < dropdown_items_length; ++i) {
dropdown_items[i].classList.remove('dropdown-item--hover');
};
}
var navigation_hover_by_keydown = function (event) {
var event = event || event.window;
var UP = 38;
var DOWN = 40;
var SCROLL_STEP = 66;
if (event.keyCode === UP) {
keydown_count--;
if (keydown_count < 0) {
keydown_count = dropdown_items_length - 1;
dropdown_content.scrollTop = 66 * dropdown_items_length;
}
if (keydown_count < (dropdown_items_length - 3)) {
dropdown_content.scrollTop -= 66;
};
} else if (event.keyCode === DOWN) {
keydown_count++;
if (keydown_count >= dropdown_items_length) {
keydown_count = 0;
dropdown_content.scrollTop = 0;
}
if (keydown_count > 3) {
dropdown_content.scrollTop += 66;
};
}
clear_navigation_hover();
dropdown_items[keydown_count].classList.add('dropdown-item--hover');
}
var dropdown_input = doc.querySelector('.dropdown-input');
dropdown_input.addEventListener('keydown', navigation_hover_by_keydown, false);
var navigation_hover_by_hover = function () {
clear_navigation_hover();
this.classList.add('dropdown-item--hover');
keydown_count = this.getAttribute('data-index');
console.log('hover');
}
for (var i = 0; i < dropdown_items_length; ++i) {
dropdown_items[i].addEventListener('mouseover', navigation_hover_by_hover, false);
}
您可以使用 CSS pointer-events 功能来禁用在任何页面元素上的悬停。在按键上,您需要像这样将此属性添加到 body 标签中
document.body.style.pointerEvents = 'none';
再次在按键释放时,您可以删除此 属性 以便鼠标悬停再次开始工作。所以在密钥发布时你需要做
document.body.style.pointerEvents = 'auto';
指针事件 属性 允许将 HTML 元素排除在鼠标目标之外。所有后代元素也被排除在鼠标目标之外,除非指针事件 属性 已为该节点明确覆盖。
您可以设置 css 选择器,而不是 :hover,任何类似 :hover:not(.unhover) 的东西,class .unhover 可以使用 js
添加
我实现了一个自定义下拉菜单,当我通过键盘移动时遇到了问题:悬停也可以,但我不知道如何禁用它。我已将我的代码粘贴到此处 http://jsfiddle.net/4o0bcv1d/,但我的代码在这里工作正常。当我将代码复制到 index.html - 当我通过键盘移动时,悬停再次起作用。 我该如何解决?
var doc = document;
var keydown_count = -1;
var dropdown_content = doc.querySelector('.dropdown-content');
var dropdown_items = doc.querySelectorAll('.dropdown-item');
var dropdown_items_length = dropdown_items.length;
var clear_navigation_hover = function () {
for (var i = 0; i < dropdown_items_length; ++i) {
dropdown_items[i].classList.remove('dropdown-item--hover');
};
}
var navigation_hover_by_keydown = function (event) {
var event = event || event.window;
var UP = 38;
var DOWN = 40;
var SCROLL_STEP = 66;
if (event.keyCode === UP) {
keydown_count--;
if (keydown_count < 0) {
keydown_count = dropdown_items_length - 1;
dropdown_content.scrollTop = 66 * dropdown_items_length;
}
if (keydown_count < (dropdown_items_length - 3)) {
dropdown_content.scrollTop -= 66;
};
} else if (event.keyCode === DOWN) {
keydown_count++;
if (keydown_count >= dropdown_items_length) {
keydown_count = 0;
dropdown_content.scrollTop = 0;
}
if (keydown_count > 3) {
dropdown_content.scrollTop += 66;
};
}
clear_navigation_hover();
dropdown_items[keydown_count].classList.add('dropdown-item--hover');
}
var dropdown_input = doc.querySelector('.dropdown-input');
dropdown_input.addEventListener('keydown', navigation_hover_by_keydown, false);
var navigation_hover_by_hover = function () {
clear_navigation_hover();
this.classList.add('dropdown-item--hover');
keydown_count = this.getAttribute('data-index');
console.log('hover');
}
for (var i = 0; i < dropdown_items_length; ++i) {
dropdown_items[i].addEventListener('mouseover', navigation_hover_by_hover, false);
}
您可以使用 CSS pointer-events 功能来禁用在任何页面元素上的悬停。在按键上,您需要像这样将此属性添加到 body 标签中
document.body.style.pointerEvents = 'none';
再次在按键释放时,您可以删除此 属性 以便鼠标悬停再次开始工作。所以在密钥发布时你需要做
document.body.style.pointerEvents = 'auto';
指针事件 属性 允许将 HTML 元素排除在鼠标目标之外。所有后代元素也被排除在鼠标目标之外,除非指针事件 属性 已为该节点明确覆盖。
您可以设置 css 选择器,而不是 :hover,任何类似 :hover:not(.unhover) 的东西,class .unhover 可以使用 js
添加