我有带有:active
CSS样式的DOM元素。如果用户点击,但从未发布点击,我希望能够通过Javascript取消:active
样式。
我尝试过document.activeElement.blur()
但是当用户没有发布点击时,这不起作用。 (参见小提琴here。)
如果用户没有释放他们的点击,我该如何强制模糊元素?
答案 0 :(得分:3)
@ bobdye&#39; s 示例无法正常工作,因为<div>
元素无法集中精力&#34;默认情况下。
您可以通过为div分配tabindex
属性来强制此行为,此处为fiddle。
<div class="defocus">.::.:.:.::.</div>
<div class="defocus">:..:.:.:..:</div>
<div class="defocus">.::.:.:.::.</div>
将class="defocus"
属性添加到x秒后需要模糊的任何元素。
div:active {
color:lightcoral;
}
(function () {
window.addEventListener("load", function () {
var seconds = 0.15 * 1000;
var defocused = document.getElementsByClassName("defocus");
for (var i = 0, l = defocused.length; i < l; i++) {
var el = defocused[i];
el.style.outline = 0; //optional
el.setAttribute("tabindex", -1);
el.addEventListener("mousedown", blur);
}
function blur(e) {
var el = e.target;
setTimeout(function (el) {
el.blur();
}, seconds, el);
}
});
})();
defocus
类的所有元素。tabindex="-1"
。使用-1
作为索引会阻止其充当tab break point,但允许它接收focus
和blur
个事件。blur()
函数添加到mousedown
事件中,该事件将在x秒后散焦 de元素。blur()
函数,该函数将使用setTimeout()
来处理散焦元素。那就是它,希望它有所帮助!
注意:我并不特别关心赏金,请保留你的代表!
注意:感谢@Adam指出seaf的变量需要var前缀以防止它们变成全局。
答案 1 :(得分:0)
This Fiddle如果用户按住鼠标超过500毫秒,则取消活动状态的简单示例。
它使用链接:
<a id="testlink" href="#">Click this</a>
如果活动,样式为红色,这个Javascript:
var lnk = document.getElementById('testlink');
var mousedown = false;
var timerId = null;
lnk.addEventListener('mousedown', function(e) {
mousedown = true;
timerId = window.setTimeout(function() {
if (mousedown) {
lnk.blur();
}
}, 500);
});
lnk.addEventListener('click', function(e) {
mousedown = false;
window.clearTimeout(timerId);
});
显然不是针对您的特定情况而定制的,而是“概念证明”。
答案 2 :(得分:0)
要添加到其他答案中,您可以使用转换(延迟与否):http://codepen.io/anon/pen/LEXZGB
*:active {
background: red;
filter:blur(5px);
transition: filter 3s 1s;
}
&#13;
<script src='http://s.codepen.io/assets/libs/prefixfree.min.js'></script>
see me blured if you click too long.
&#13;