您可以做的是setTimeout
在各种鼠标事件期间使用延迟检查。结合 jQuery$.data()
来存储跨事件(在每个元素上)的超时应该可以帮助您完成这一切。这是一个例子:
HTML:
<ul id="menu">
<li><a href="#" onclick="return false;" class="test"></a></li>
<li><a href="#" onclick="return false;" class="test"></a></li>
</ul>
JS:
var mousepress_time = 1000; // Maybe hardcode this value in setTimeout
var orig_message = "Click Here"; // Remove this line
var held_message = "Down"; // Remove this line
$(document).ready(function () {
$(".test")
.html(orig_message) // Remove this line
.on("mousedown", function () {
console.log("#########mousedown"); // Remove this line
var $this = $(this);
$(this).data("checkdown", setTimeout(function () {
// Add your code to run
$this.html(held_message); // Remove this line
}, mousepress_time));
}).on("mouseup", function () {
clearTimeout($(this).data("checkdown"));
console.log("#######mouseup"); // Remove this line
$(this).html(orig_message); // Remove this line
}).on("mouseout", function () {
clearTimeout($(this).data("checkdown"));
console.log("#######mouseout"); // Remove this line
$(this).html(orig_message); // Remove this line
});
});
演示:http: //jsfiddle.net/7jKYa/10/
这还有很多事情要做,因为你也加入了悬停,但在大多数情况下,我认为这就是你想要的。
如有必要,它可以很容易地转换为插件,否则我认为它可以单独工作。我希望这会有所帮助!