2015-10-07 39 views
0

我的if/else語句不起作用。我需要做的是改變#Scroller-Text的css(margin-top)。它必須在觸發$ nav.slideToggle的頭部被點擊時發生。這是一個響應式網站,所以我還需要確保我的代碼不會在平板電腦或桌面視圖中扭曲任何內容。Jquery slideToggle使用If/Else語句

var screensize = document.documentElement.clientWidth; 

$(document).ready(function(){ 

    var $window = $(window), 
     $nav = $('.link'), 
     $button = $('header'); 

    $button.on('click', function(){ 
     $nav.slideToggle(400); 

     if($(this).is(':visible')) { 
      $('#Text-Scroller').css('margin-top', '60'); 
     } else { 
      $('Text-Scroller').css('margin-top', '102'); 
     } 
    }); 

    function adjustStyle(width) { 
     width = parseInt(width); 
     if (width > 600) { 
      $nav.show(); 
     } else { 
      $nav.hide(); 
     } 
    } 

    $(function() { 
     adjustStyle($(this).width()); 
     $(window).resize(function() { 
      adjustStyle($(this).width()); 
     }); 
    }); 
}); 

HTML ,在跳出我

<nav> 
     <ul id="mobile_active"> 
      <li class="link"><a href="#">About Us</a></li> 
      <li class="link"><a href="#">Creative</a></li> 

      <li id="logo"><a href="#"><img src="links/Logo.png"/></a></li> 

      <li class="link"><a href="#">Portfolio</a></li> 
      <li class="link"><a href="#">Contact Us</a></li> 
     </ul> 
    </nav> 

    <header> 
     <a class="mobile_menu"></a> 
    </header> 
</div> 

<div class="line"></div> 

<div class="container"> 

<div id="G"> 
<img src="links/Image.png"/> 

<div id="Text-Scroller"> 
<h1>Headline</h1> 
<p>Body Copy</p> 
</div> 
</div> 
</div> 
+0

你確定它有ATTR':visible'?它可能只是「可見」。 – postelrich

+0

請提供一些HTML標記。看起來你正在檢查「this」的可見性,這是​​你點擊的按鈕。那是你正在嘗試做什麼? – JeredM

+0

@riotburn $ .is(':visible')是正確的語法。 –

回答

1

你有...重大問題在這裏。我建議花更多時間瞭解響應式設計和JavaScript。你有一個文件準備功能的文件準備函數內部:

$(document).ready(function() 

相同

$(function() 

而你讓他們相互嵌套,這並不做任何事情。但是,你實際上並不需要任何代碼。你想要的功能,可以簡單地用下面的CSS補充說:

@media (max-width: 600px) { 
    .link { 
    display: none; 
    } 
} 

那隻剩下面的JavaScript:

$(document).ready(function(){ 

    var $nav = $('.link'), 
     $button = $('header'); 

    $button.on('click', function(){ 
     $nav.slideToggle(400); 

     if($(this).is(':visible')) { 
      $('#Text-Scroller').css('margin-top', '60'); 
     } else { 
      $('Text-Scroller').css('margin-top', '102'); 
     } 
    }); 
}); 

這裏有幾個問題。首先,'this'引用事件處理程序觸發的dom元素,在這種情況下爲$ button。 Button永遠不會被隱藏,所以你的if塊永遠不會是真的,好像你想檢查$ nav來獲取visiblity。 $ nav實際上是一個元素數組(所有的鏈接),所以你不能簡單地檢查數組的可見性,你需要檢查單個項目的可見性,所以你實際上需要$($ nav [0]) 。是( ':可見');

但是,即使這樣也行不通,因爲slideToggle是一個動畫,並且$ nav元素在動畫完成之前不會被隱藏,但是if塊會立即執行,因此實際上需要調用if在slideToggle完成後在回調中阻止邏輯。

然後你唯一剩下的問題是在else塊中你忘了'#',它需要是$('#Text-Scroller'),'60'和'102'不代表任何東西,這可能是他們,像素,百分比等等,我猜你想「60像素」和「102px」,最終給你:

$(document).ready(function(){ 

    var $nav = $('.link'), 
     $button = $('header'); 

    $button.click(function(){ 
     $nav.slideToggle(400, function() { 
      if($($nav[0]).is(':visible')) { 
       $('#Text-Scroller').css('margin-top', '60px'); 
      } else { 
       $('#Text-Scroller').css('margin-top', '102px'); 
      } 
     }); 
    }); 
}); 

即使是現在我猜這億韓元」不會給你想要的東西,因爲菜單的高度降低了,一旦完成,立刻就會出現一個巨大的邊距。你可以在相反的方向上創建邊緣的動畫......但老實說,我認爲這更多的是設計不當的標誌。我認爲你應該轉向一個CSS動畫解決方案,併爲nav元素設置一個高度。我相信這會讓你得到你所需要的,並且會更簡單。這裏是一個的jsfiddle:JSFiddle with CSS animation

+0

感謝您的專家諮詢!我是新來的jQuery和最初嘗試了CSS的解決方案,但即使「@media(最大寬度:600像素){{。鏈接顯示:無;}」造成意想不到的結果,當我調整我的瀏覽器我被解僱了。您的解決方案非常完美,幫助我瞭解了更多關於Jquery的知識。我仍然需要動畫導航的高度,因爲差距問題依然存在。如果你想看看它,這裏是一個小提琴:https://jsfiddle.net/thwhkow7/1/。如果不是,再次感謝你,你已經得到了巨大的幫助。 –

+0

沒問題!我認爲我們可以解決這個差距問題,但是我相信導航只會壓低內容,所以取決於你想要的。我會看看它。你最初在css解決方案中遇到問題的原因是,你將.link隱藏在小於600像素的屏幕上,但你永遠不會再顯示它,所以你必須將它設置爲在常規鏈接中再次顯示。 –

+0

所以,就高度而言,你有這個差距的原因是因爲.nav的高度被設置。當菜單打開時,這會阻止內容被壓下,我想我認爲這是你想要的行爲。如果你不想要差距,當菜單打開時你想要發生什麼?你想把內容推下來嗎?你想讓菜單位於內容之上嗎?如果你只是想要內容被推下來,你必須停止製作內容位置:相對和頂部:120,而是由它在菜單下的事實決定。 –

1

一件事是你的別人的前綴的選擇:

$('Text-Scroller').css('margin-top', '102'); 

應該

$('#Text-Scroller').css('margin-top', '102'); 

如果元素H爲Text-Scroller

編輯的ID:同樣的事情$button = $('header')

EDIT2:你打算檢查$button代替$('#Text-Scroller')的知名度?這是目前的檢查$button

+0

謝謝,我已經添加了ID的選擇,但我認爲你有EDIT2真正的問題 - 我需要檢查$資產淨值的知名度。但是,當我將語句更改爲if($)(nav).is(':visible')){時,沒有任何反應。 –

+0

這應該工作'$ nav.is(':visible')'。你將需要閱讀jQuery選擇器才能在你的項目中取得成功。 https://api.jquery.com/category/selectors/basic-css-selectors/ –

+0

我想,在第一,但我得到在該行有語法錯誤。代碼是如果$ nav.is(':visible'){其餘的都是相同的。感謝您的鏈接。我顯然需要審查一些細節。 –