我有一个列表,看起来像这样:
<ul>
<li>
<div class="hold">Click and hold this button for 500ms</div>
<div class="show">And this element should appear.</div>
</li>
<li>
<div class="hold">Click and hold this button for 500ms</div>
<div class="show">And this element should appear.</div>
</li>
</ul>
我只希望用户单击并按住.hold div,并在经过500毫秒后出现.show div。
答案 0 :(得分:-1)
这是我的解决方案:https://jsfiddle.net/xwg4jey9/11/
$(".show").hide(0);
var timeoutId = 0;
var showHiddens = function(hold) {
var show = $(hold).closest("li").find(".show");
show.show();
}
$('.hold').on('mousedown', function() {
var hold = this;
timeoutId = setTimeout(function() {
showHiddens(hold);
}, 500);
}).on('mouseup mouseleave', function() {
clearTimeout(timeoutId);
});
答案 1 :(得分:-1)
您可以在Google上找到大量解决方案,但是我将使用 jQuery 来解释一个简单的解决方案。
您有两个由各自的类表示的元素。点击保持器元素.hold
和要显示的元素.show
。
由于.hold
元素负责触发该函数以显示隐藏的元素,因此我们添加了两个事件侦听器,一个用于侦听鼠标单击的事件侦听器,另一个用于侦听鼠标的释放。
我们定义了一个mousedown
事件,该事件将在指针位于元素内部时按下定点设备按钮时在.hold
元素上触发。此时,我们将启动timer
500毫秒。如果没有清除timer
,它将调用showElements()
方法以显示隐藏的元素。
现在,要知道鼠标何时释放元素,我们将结合两个事件:与mouseup
事件相反的mousedown
事件和mouseleave
事件,即当定点设备的光标移出.hold
元素时触发。此事件将通过timer
事件清除mousedown
设置。
slideToggle()
只需将hidden.show();
替换为hidden.slideToggle('slow');
这是实现。
let timer;
function showElements(holder) {
let hidden = $(holder).closest('li').find('.show');
hidden.slideToggle('slow');
}
$(function() {
console.log("ready!");
$(".show").hide(0);
});
$('.hold')
.on('mousedown', function() {
let holder = this;
timer = setTimeout(function() {
showElements(holder);
}, 500);
})
.on('mouseup mouseleave', function() {
clearTimeout(timer);
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<ul>
<li>
<div class="hold">Click and hold this button for 500ms</div>
<div class="show">And this element should appear.</div>
</li>
<li>
<div class="hold">Click and hold this button for 500ms</div>
<div class="show">And this element should appear.</div>
</li>
</ul>