jQuery方法的本地JavaScript等效项:CSS和动画

您真的需要jQuery吗? 有时-特别是如果您想使用jQuery 1.x支持IE6 / 7/8。 但是,现代浏览器API现在提供了我们在jQuery中理所当然的许多功能。 在本文中,我们将研究与CSS相关的方法。

类操作

最常见的jQuery任务之一是将类应用于特定元素:

$("#myelement").addClass("myclass");

我们可以在本地JavaScript中实现相同的目的:

document.getElementById("myelement").className = "myclass";

这不是全部故事:

  1. jQuery可以将类应用于任意数量的节点。
  2. jQuery将新类追加到现有的类定义中,但是本机示例将覆盖它们。

在本机JavaScript中, className属性只是一个字符串。 因此,我们需要一个函数来复制jQuery的工作方式,例如

function addClass(node, class) {
	if (!node.length) node = [node];
	for (var n = 0, m = node.length; n < m; n++) {
		if ((" " + node[n].className + " ").indexOf(" "+class+" ") >= 0) {
			node.className += " " + class;
		}
	}
}
// apply myclass to all nodes
addClass(document.getElementById("myelement"), "myclass");

尽管此代码比jQuery更快更小,但我们正在复制库中已有的内容-毫无意义。

幸运的是,现代浏览器现在提供了一个新的classList属性,该属性实现了DOMTokenList —应用于节点的所有类的类似数组的集合。 可以使用以下属性:

  • length —应用的类名称的数量
  • item( index —特定索引处的类名称
  • contains( class —如果节点应用了该类,则返回true
  • add( class —将新类应用于节点
  • remove( class —从节点移除一个类
  • toggle( class —删除或添加一个类(如果分别应用或不应用)

我们可以优先于笨拙的className属性使用它:

document.getElementById("myelement").classList.add("myclass");

IE9以外的大多数浏览器都支持classList。 幸运的是,可以使用一些垫片,这些垫片可以有条件地加载到该浏览器中。

样式操纵

jQuery提供了许多应用特定样式的方法,例如

$("#myelement").css({
	color: "#c00",
	backgroundColor: "#eee",
	width: "200px",
	height: "100px",
	borderColor: "#f00"
});

本机等效项:

var m = document.getElementById("myelement"), c = m.style;
c.color = "#c00";
c.backgroundColor = "#eee";
c.width = "200px";
c.height = "100px";
c.borderColor = "#f00";

使用缓存的选择器进行了10,000次以上的迭代,jQuery代码在6,670毫秒内执行。 本机JavaScript花费了330毫秒-快了20倍。

当然,除非需要以某种方式计算值,否则都不应该使用。 在CSS中定义一类样式,然后将其名称应用于元素,效率更高。

动画

jQuery提供了开箱即用的各种动画效果,包括滑动和淡入淡出。 本机JavaScript可以更快,但是这无关紧要: CSS3动画同时击败了两者

我最初对CSS3动画持怀疑态度。 它永远无法提供细粒度的控制(例如,在N帧后停止动画)并侵犯了JavaScript的行为责任。 但是,好处多于缺点:

  1. CSS3动画由浏览器处理; 它总是比JavaScript执行更快。
  2. CSS3动画易于使用,所需的代码也少得多。
  3. CSS3提供了诸如3D转换之类的效果,仅在JavaScript中这是不切实际的,即使并非不可能。

IE9及以下版本不会产生效果,但是它们可以正常降级, IE10应该在几个月内成为主导版本

CSS3精灵永远不会消失。 如果您仍在现代浏览器中将jQuery或JavaScript用于DOM动画,则可能是在浪费时间。

也就是说,JavaScript可用于在CSS3动画开始,停止或继续进行下一个迭代时使用相应的animationstartanimationendanimationiteration对CSS3动画做出反应。 有关更多信息,请参阅如何在JavaScript中捕获CSS3动画事件

在我的下一篇文章中,我们将通过查看事件,Ajax和实用程序函数来完成本系列。

From: https://www.sitepoint.com/jquery-vs-raw-javascript-2-css3-animation/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值