我有这个代码来修改但不理解if块中的第二个语句

时间:2016-10-21 20:43:51

标签: javascript

块中的第二个语句$next.addclass(type).offsetWidth既不是对函数的调用,也不是对赋值的调用。

if (transition) 
{ 
$next.addClass(type);
$next[0].offsetWidth; 
}
else 
{  
$active.removeClass('active');
$next.addClass('active');
}

这里的逻辑是什么?

1 个答案:

答案 0 :(得分:1)

offsetWidth是必须计算的度量属性,访问它将导致DOM reflow。这是读取未使用值的唯一可能用途。否则它只是死代码。

代码应该是:

if (transition) { 
    $next.addClass(type);
    forceDomReflowFrom($next[0]);
} else {  
    $active.removeClass('active');
    $next.addClass('active');
}

function forceDomReflowFrom(el) {
    el.offsetWidth;
}

这是另一个related question,其中此方法用于强制浏览器重排(否则CSS动画将无效)。