Jquery 如果';X';div可见,';Y';div是隐藏的。如果';X';Div是隐藏的,';Y';div是可见的

Jquery 如果';X';div可见,';Y';div是隐藏的。如果';X';Div是隐藏的,';Y';div是可见的,jquery,hide,slideshow,show,Jquery,Hide,Slideshow,Show,我正在建立一个网站,并有一个幻灯片。 幻灯片有标题和索引,覆盖整个页面。 当覆盖被激活时,字幕需要消失。 当覆盖被禁用时,通过单击退出按钮、缩略图链接或菜单链接,字幕必须返回 这就是我目前所拥有的 if($('#indexpage').css('display') == 'none'){ $('#imageinfo').css('visibility') == 'visible'} else { $('#imageinfo').hide('slow');

我正在建立一个网站,并有一个幻灯片。 幻灯片有标题和索引,覆盖整个页面。 当覆盖被激活时,字幕需要消失。 当覆盖被禁用时,通过单击退出按钮、缩略图链接或菜单链接,字幕必须返回

这就是我目前所拥有的

    if($('#indexpage').css('display') == 'none'){ 
    $('#imageinfo').css('visibility') == 'visible'} 
    else { 
    $('#imageinfo').hide('slow'); 
    }
我一辈子都想不出如何让它工作。 任何帮助都将不胜感激

谢谢,

您可以使用选择器。是否(“:可见”)如下所示:

if($('#indexpage').css('display') == 'none')
$('#imageinfo').show('slow'); 
else
$('#imageinfo').hide('slow');

假设
可见性
是您的
Cssclass
,然后重试

  $('#imageinfo').addClass('visibility').show('fast');

根据您的解释,代码的第二行:

$('#imageinfo').css('visibility') == 'visible'
似乎正在尝试设置
'visibility'
CSS属性,但实际上它正在将与该值关联的当前值与字符串
'visibility'
进行比较,并且该比较的结果没有用于任何用途。即使将相等比较运算符
=
替换为赋值运算符
=
,它仍然是不正确的,因为尝试将该函数的返回值赋值为字符串是没有意义的。更改属性的正确语法如下所示:

$('#imageinfo').css('visibility', 'visible');
但是您也可以使用
.show()
作为
.hide()
的反面。因此:

if($('#indexpage').css('display') == 'none'){
   $('#imageinfo').show('slow');
} else {
   $('#imageinfo').hide('slow');
}

至于与您拥有的任何其他代码相匹配,我首先需要查看您的其他代码,特别是您如何设置事件处理程序。

在控制显示或隐藏一个或另一个元素的代码中,您只需使用:

然后每次调用
.toggle()
,可见的将被隐藏,隐藏的将被可见

这假设您已经将css设置为默认显示一个,隐藏另一个。因此,页面的CSS应包含:

#扩展页面{
显示:无;
}

如果这不适用于您,并且您仍然希望根据另一个元素是否可见来显示或隐藏一个元素,请使用传递一个布尔参数来指示是否显示或隐藏该元素。使用and获取该布尔值


编辑:请注意,您的示例不起作用有几个原因

首先,您似乎试图将
.hide()
.css(“可见性”)
一起使用。但是,
.hide()
将元素的
显示设置为
none
。设置后,
可见性
值将无效。
.hide()
的推论是
.show()
。但是
.toggle()
有时可能是首选,因为它封装了
.hide()
.show()
的功能。当您希望根据特定条件显示或隐藏元素时,尤其如此。在这种情况下,将一个布尔值传递给
.toggle()
,指示元素是否应可见。您可以通过以下方式减少代码:

if (checkSomeCondition()) {
    $("#myElement").show();
}
else {
    $("#myElement").hide();
}
只需输入一行代码:

$("#myElement").toggle(checkSomeCondition());

其次,代码失败的另一个原因是您正在评估
可见性的值,而不是指定可见性值。
=
运算符是相等运算符,它比较两个值并返回布尔值。要分配值,需要使用赋值运算符(
=
):

但是,在这种情况下,您不会使用赋值运算符,因为您不能为函数调用的结果赋值。即,
someFunction()=1
是无效的JavaScript。在jQuery中,要读取一个值,可以使用单个参数。要写入值,请传递第二个参数,指示新值:

$('#imageinfo').css('visibility', 'visible');

这修正了语法,但由于上面的第一个问题,它并不能解决您的问题-您需要设置
显示
,而不是
可见性
,如果您喜欢单线解决方案,您可以尝试:

$('#y').css('display', $('#x').is(':visible') ? 'none' : 'block');

您可能想阅读这篇关于隐藏、淡入淡出和动画之间区别的文章。我之所以提到这一点,是因为如果页面上的任何内容相对于隐藏/显示元素相对定位,那么这些技术的差异确实会破坏布局

因为您将在许多不同的场景中使用它,所以我将构建两个可以调用的函数

HideOverlay,它删除覆盖并使索引可见

ShowOverlay,它删除索引并使覆盖可见

里面有开关。如果要在脚本中的其他场景中将索引与覆盖分开隐藏,请创建另一个函数,并从hideOverlay/showOverlay中调用它


(其他人可能会建议通过传递真/假变量为这个覆盖隐藏/显示一个单一函数,但我喜欢保持它的简单性,直到我知道发生了什么,然后在我完全理解它的工作原理时对它进行细化)

或者,更简短的:
$('#y')[$('#x')。是(':visible')?“hide”:“show”]()+2-甜蜜。我不知道我们可以给func命名为字符串。i、 直到我看到你使用的访问方式。。非常酷。这是一种“聪明”的技术,在少数情况下很酷,但其余时间只会使代码更难阅读,从而更难维护。但一定要注意。谢谢,没用。事实上,这些都没有。可能在某个地方与其他插件有冲突。无论如何,谢谢。这可能很难做到,但这个问题的标题很模糊。你能想出一个更好的方法,这样其他人在遇到同样的问题时也能从中受益吗?谢谢,没用。事实上,这些都没有。可能在某个地方与其他插件有冲突。无论如何谢谢你
$("#myElement").toggle(checkSomeCondition());
var a = 1;
a == 2;  // returns false, a is unchanged
a = 2;   // now a is 2
$('#imageinfo').css('visibility', 'visible');
$('#y').css('display', $('#x').is(':visible') ? 'none' : 'block');