看了你的示例小提琴后,我可以说没有 jQuery 这实际上很容易。
那里的所有功能都只是简单的innerHTML和style操作,以及事件订阅。
不使用 jQuery 直接重写该代码是:
var i = 0;
document.getElementById("dragbar").onmousedown = function (e) {
e.preventDefault();
document.getElementById("mousestatus").innerHTML = "mousedown" + i++;
window.onmousemove = function (e) {
document.getElementById("position").innerHTML = e.pageX + ', ' + e.pageY;
document.getElementById("sidebar").style.width = e.pageX + 2 + "px";
document.getElementById("main").style.left = e.pageX + 2 + "px";
};
console.log("leaving mouseDown");
};
window.onmouseup = function (e) {
document.getElementById("clickevent").innerHTML = 'in another mouseUp event' + i++;
window.onmousemove = null;
};
所以这里和pure JS 是一样的。
编辑:正如@BenjaminGruenbaum 指出的那样,覆盖DOM 元素上的on* 属性与指定新的事件处理程序不同。
在 DOM 元素上覆盖 onmouseup、onload、onclick 等属性是“旧”方式,因此即使在 JS 的石器时代也支持它。我上面的代码就是这样写的。
现在添加和删除事件处理程序的标准方法是addEventListener 和removeEventListener。旧 IE 不支持它们(但可以是 worked around)。
它让您可以将无限数量的侦听器附加到同一个事件,并且它们不会相互干扰。
因此可以通过以下方式实现相同的功能:
var i = 0;
function dragBarMouseDown(e) {
e.preventDefault();
document.getElementById("mousestatus").innerHTML = "mousedown" + i++;
window.addEventListener("mousemove", windowMouseMove, false);
console.log("leaving mouseDown");
}
function windowMouseMove(e) {
document.getElementById("position").innerHTML = e.pageX + ', ' + e.pageY;
document.getElementById("sidebar").style.width = e.pageX + 2 + "px";
document.getElementById("main").style.left = e.pageX + 2 + "px";
}
function windowMouseUp(e) {
document.getElementById("clickevent").innerHTML = 'in another mouseUp event' + i++;
window.removeEventListener("mousemove", windowMouseMove, false);
}
document.getElementById("dragbar").addEventListener("mousedown", dragBarMouseDown, false);
window.addEventListener("mouseup", windowMouseUp, false);
Fiddle.
请注意,在这种情况下,我的函数不是匿名的,因此如果您尚未在函数范围内,则使用 self executing function 进行范围界定在这里是有意义的。