2017-09-22 56 views
1

我只是鑽研的JavaScript的世界,有關於一個難題,我目前遇到的查詢....的jQuery/JavaScript的顯示/隱藏事件

我有一個菜單按鈕,揭示和隱藏我正在工作的網站上的導航菜單。對於此菜單按鈕,我附加了一些JavaScript以在導航欄顯示時「隱藏」主要網站內容,並在導航欄隨後關閉時「顯示」主要內容再次。

我編碼的JavaScript做的工作,但我知道這是不對的,而且我不知怎麼省了它!我知道這一點,因爲'reveal'和'hide'元素的腳本的計時值相互影響......使得設置動畫的時間有點不可預測,無法準確設置。

菜單按鈕,顯示和隱藏導航菜單具有附接至其以下類:

.menu-toggle 

並且當點擊它以顯示導航欄添加一個額外的類,這是:

.toggled-on 

所以它的點擊狀態類:

'.menu-toggle toggled-on' 

這裏是個ËJS控制網站內容的隱藏和暴露:

$(document).on('click', '#menu-toggle', function() { 
    $('.site-content').animate({opacity:1, visibility:'visible'}, 100); 
}); 

$(document).on('click', '.toggled-on', function() { 
    $('.site-content').animate({opacity:0, visibility:'visible'},  300); 
}); 

我相信這個問題是因爲類的分配而產生的仍然是兩個「正常」和「點擊」菜單按鈕的狀態。

我想我需要做somethng這樣的:

$(document).ready(function(){ 

    if ($('#menu-toggle').hasClass('toggled-on')) { 
    $('#menu-toggle').addClass('nav-on'); 
    } else { 
    $('#menu-toggle').addClass('nav-off'); 
    } 

}); 

然而,這是行不通的。

如果任何人都可以指示我如何更好地編碼的方向,那麼將不勝感激。

+0

什麼時候添加'.toggled-on'類?我認爲你應該只在動畫完成後添加這個類。例如:$('。site-content')。animate({opacity:1,visibility:'visible'},100).done(function(){$(「..」)。addClass('toggled-on' )}) – lub0v

+0

感謝回覆/'.toggled-on'類被添加到一些我沒有編程的JS中(它是wordpress二十六個主題標準),所以我寧願保留原樣。 Incidentely我試着去掉'.menu-toggle'這個類,當點擊這個按鈕的時候,這個唯一歸因於按鈕處於點擊狀態的類是'切換'而不是'菜單切換'。但是,噸證明非常成功... – WolfmanLondon

+0

你可以添加您的HTML和CSS部分?所以我可以修改相同的 –

回答

0

如果我理解正確,你想切換類。你可以試試http://api.jquery.com/toggleclass/

讓我知道它是否適合你!

感謝

卡邁勒

+0

Thankyou Kamal,我會研究這個。顯然,我從來沒有真正看過Jquery站點本身......它看起來佈局非常有用,所以謝謝! – WolfmanLondon

+0

關於它的思考我不認爲切換類是我需要的基本上我已經有一個切換類的發生,當菜單按鈕被點擊上''.toggled-on'類被添加.. – WolfmanLondon

+0

關於第二個想法我認爲我需要做的是在兩個類之間切換,即:當單擊時,'class-one'get被'class 2'取代。我相信問題是類'menu-toggle'出現在'clicked'和'unclicked'狀態,所以被點擊的狀態類是'菜單切換開啓'...我嘗試刪除'菜單切換'當點擊'切換'類被添加,但這只是刪除默認適當的樣式當按鈕被點擊時。正如我所說,我認爲我需要切換BETWEEN兩個獨特的類 – WolfmanLondon

0
$(function() { 
    $('body').on('click', '#menu-toggle', function() { 
     $('.site-content').toggle(300) 
    }) 
}) 

上面的代碼將導致.site-content div來淡入和淡出當你點擊#menu-toggle

在jQuery函數$()內包裝函數文字只是$(document).ready()的簡寫。你可以用任何方式寫它,它的工作原理是一樣的。我喜歡更簡潔的語法。

jQuery中的.toggle()方法只是簡單地切換元素的可見性。您不需要更改類或直接操作不透明度或可視性來執行此操作。 jQuery檢測它是否可見並負責其餘部分。您可以添加持續時間以獲得淡入淡出效果。

我將綁定委託給body標籤,因爲我不知道您的HTML結構。如果.site-content有一個包裝div,可以委託給它(這個想法是將事件委託給事件目標更有效,而不是讓事件直到文檔)。

享受!

更新來自OP:

感謝reply.This確實切換的內容,但我 使用的知名度和透明度屬性,因爲我不想讓 佈局改變時在.site內容是hidden.When能見度 切換含量顯着完全自敗

新的解決方案:

我不知道你是什麼樣的佈局/ CSS的樣子,但我認爲這是你想要的...

添加以下的CSS樣式爲.site-content

visibility: visible; 

現在添加下面的CSS規則:

.site-content.hidden { 
    visibility: hidden; 
} 

現在的JS代碼更改爲以下:

$(function() { 
    $('body').on('click', '#menu-toggle', function() { 
     $('.site-content').toggleClass('hidden') 
    }) 
}) 

樣式visibility: hidden意味着您將不再看到該元素,但它仍然是文檔流的一部分。換句話說,它仍然佔用佈局空間。此更改不會影響其餘佈局。

現在,當你點擊#menu-toggle它會添加或刪除隱藏的類。

+0

感謝您的答覆。這的確切換了內容,但我使用的是可見性和不透明屬性,因爲我不希望佈局在隱藏.site內容時發生變化。當可見性切換時,內容顯然完全消失 – WolfmanLondon

+0

明白了。看到我更新的答案。最好的 - 尼爾 –

相關問題