我有以下代码,它测试浏览器视口中是否存在元素:
(function ($) {
$.fn.visible = function (partial, hidden, direction) {
var $t = $(this).eq(0),
t = $t.get(0),
$w = $(window),
viewTop = $w.scrollTop(),
viewBottom = viewTop + $w.height(),
viewLeft = $w.scrollLeft(),
viewRight = viewLeft + $w.width(),
_top = $t.offset().top,
_bottom = _top + $t.height(),
_left = $t.offset().left,
_right = _left + $t.width(),
compareTop = partial === true ? _bottom : _top,
compareBottom = partial === true ? _top : _bottom,
compareLeft = partial === true ? _right : _left,
compareRight = partial === true ? _left : _right,
clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true,
direction = (direction) ? direction : 'both';
if (direction === 'both') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop)) && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
else if (direction === 'vertical') return !!clientSize && ((compareBottom <= viewBottom) && (compareTop >= viewTop));
else if (direction === 'horizontal') return !!clientSize && ((compareRight <= viewRight) && (compareLeft >= viewLeft));
};
})(jQuery);
但是,当我通过JS lint运行时,我收到一条错误,指出direction
已经定义。我的语法在哪里错了?
(该剧本仍有效)
答案 0 :(得分:4)
direction
是您在var direction
函数内定义的参数名称和。
如果您将上一行的逗号更改为分号,即使direction = ...
不是var
语句的一部分,那么您将没事。
答案 1 :(得分:1)
因为方向已经是你功能的一个参数。然后在var语句中再次声明它。尝试:
[...]
clientSize = hidden === true ? t.offsetWidth * t.offsetHeight : true;
direction = (direction) ? direction : 'both';
[...]
例如,。 (更改了,为a;),这将使方向行成为一个新的断言语句,而不使用var关键字。
b.t.w。
你的方向断言这样的陈述可以缩短为:
direction = direction || 'both';
如果方向未定义或任何其他假值,这将导致“两个”指向方向。