Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用if-else功能检查滑动切换状态&;在每次切换后报告滑块切换状态_Javascript_Jquery_Html_Css_Slidetoggle - Fatal编程技术网

Javascript 使用if-else功能检查滑动切换状态&;在每次切换后报告滑块切换状态

Javascript 使用if-else功能检查滑动切换状态&;在每次切换后报告滑块切换状态,javascript,jquery,html,css,slidetoggle,Javascript,Jquery,Html,Css,Slidetoggle,我试图通过一个小例子来理解slideToggle的状态 当我第一次切换时,选项元素变为绿色 当我再次单击切换(现在是第二次)时,我希望菜单元素变为红色,因为现在选项元素进入不可见状态,因此函数的其他部分应该运行,不是吗 另外,当我检查控制台时,slideToggle状态的值没有改变,为什么?它们是否应该反映元素在第二次单击后的状态,因此处于隐藏状态 我做错了什么?在本例中,我希望在第二个切换上打开菜单红色,因为选项元素不再可见 我不熟悉jQuery和编程,所以请原谅我在逻辑方面的明显错误。也许我

我试图通过一个小例子来理解slideToggle的状态

当我第一次切换时,选项元素变为绿色

当我再次单击切换(现在是第二次)时,我希望菜单元素变为红色,因为现在选项元素进入不可见状态,因此函数的其他部分应该运行,不是吗

另外,当我检查控制台时,slideToggle状态的值没有改变,为什么?它们是否应该反映元素在第二次单击后的状态,因此处于隐藏状态

我做错了什么?在本例中,我希望在第二个切换上打开菜单红色,因为选项元素不再可见

我不熟悉jQuery和编程,所以请原谅我在逻辑方面的明显错误。也许我必须从另一个角度重新思考这个问题。这就是你进来的地方,请帮我理解。多谢各位

HTML

CSS


更详细地查看jQuery:visible和:hidden选择器的文档:

问题在于:visible选择器将在所选元素占用布局中的空间时返回true,并且由于宽度不是零,因此为true

有很多方法可以满足你的需求。一种很好的方法是切换一个类,并使用该类来检测该项是否被切换:

$('#menu').click(function(){

    $('#options').slideToggle().toggleClass('opened');

    var isVisible = $( '#options' ).is( ".opened" );

    if (isVisible === true ){
        $('#options').css('background', '#16a085');
    }

    else {
        $('#menu').css('background', '#8e44ad');        
    }    
});

slideToggle函数是异步的,因此元素在完成之前不会真正隐藏。为什么不在标题中使用一个简单的标志呢?我对标志一无所知,你能给我指一下jQUery文档或一个例子吗?谢谢,这很有帮助!虽然我不知道如何切换类,但我在哪里可以找到更多关于这方面的信息?你的例子很好。你是否也与另一种逻辑有关联,因为你说有很多种方法,我试图用另一个角度来解释,也许会有帮助?谢谢。toggleClass文档就在这里:本质上,它向selector元素添加了一个类,然后在下一次单击时再次删除它们,提供了一个简单的标志,可以在每次单击时切换开关。因为它添加了一个类,所以您也可以在CSS中将其作为目标,从而使JavaScript更干净(例如,#options.opened{background:#16a085;}邪恶!谢谢!
$('#menu').click(function(){

    $('#options').slideToggle();

    var isVisible = $( '#options' ).is( ":visible" );
    var isHidden = $( '#options' ).is( ":hidden" );
    console.log (isVisible);
    console.log (isHidden);

    if ($('#options').is(':visible') === true ){
        $('#options').css('background', '#16a085');
        console.log (isVisible);
    }

    else {
        console.log (isHidden);
        $('#menu').css('background', '#8e44ad');        
    }    
});
#menu {
    width: 100%;
    height: 100px;
    line-height: 100px;
    font-size: 200%;
    background: #000000;
    color: #fff;
    text-align: center;
}

#options {
    width: 100%;
    height: 100px;
    line-height: 100px;
    font-size: 200%;
    background: #ccc;
    color: #fff;
    text-align: center;
    display: none;
}
$('#menu').click(function(){

    $('#options').slideToggle().toggleClass('opened');

    var isVisible = $( '#options' ).is( ".opened" );

    if (isVisible === true ){
        $('#options').css('background', '#16a085');
    }

    else {
        $('#menu').css('background', '#8e44ad');        
    }    
});