2015-06-18 67 views
6

我正在爲書籍發佈網站中的作者頁面設計摘要容器。一些作者有更多的摘要內容,而其他作者的內容較少。我想在div容器的高度越過截斷高度(180px)時動態地​​啓用/禁用show more/less按鈕。所以,事實證明,動態控制div容器的高度(180px和原始高度)。我需要一段能夠在所有瀏覽器中完美運行的代碼。如何在瀏覽器調整大小時觸發基於div大小的顯示或隱藏操作

我有實施了代碼在這裏:

http://jsfiddle.net/rraagghhu/9dgs6432/3/

HTML:

<div class = "container"> 
<div class="info-wrapper"> 
<div class="info"> 
Chetan Bhagat is the author of six blockbuster books.These include five novels—Five Point Someone (2004), One Night @ the Call Center (2005), The 3 Mistakes of My Life (2008), 2 States (2009), 
Revolution 2020 (2011), the non-fiction title What Young India Wants (2012) and Half Girlfriend (2014). Chetan’s books have remained bestsellers since their release. 
Four out his five novels have been already adapted into successful Bollywood films and the others are in process of being adapted as well. The New York Times called him the ‘the biggest selling English language novelist in India’s history’. Time magazine named him amongst the ‘100 most influential people in the world’ and Fast Company, USA, listed him as one of the world’s ‘100 most creative people in business’. Chetan writes columns for leading English and Hindi newspapers, focusing on youth and national development issues. He is also a motivational speaker and screenplay writer. Chetan quit his international investment banking career in 2009 to devote his entire time to writing and make change happen in the country. He lives in Mumbai with his wife, Anusha, an ex-classmate from IIM-A, and his twin boys, Shyam and Ishaan. You can email him at [email protected] or fill in the Guestbook with your feedback. You can also follow him on twitter (@chetan_bhagat) or like his Facebook fanpage (https://www.facebook.com/chetanbhagat.fanpage). 
</div> 
<a href="#" class="more">(more)</a> 
<a href="#" class="less">(less)</a> 
</div> 

<div class = "footer"> THIS IS FOOTER </div> 
</div> 

CSS:

.container{ 
    background-color: yellow; 
} 
.footer{ 
    background-color: yellow; 
} 
.info-wrapper { 
    height: auto; 
    position: relative; 
    width: auto; 
    padding: 0 0 2.5em 0; 
    background-color: red; 
} 
.info { 

    max-height: 180px; 
    height: auto; 
    width: auto; 
    overflow: hidden; 
    position: relative; 
    text-align: justify; 
} 
.info:after, .aftershadow { 
    bottom: 0; 
    width: auto; 
    height: auto; 
} 

.info-wrapper a { 
    left: 50%; 
    position: relative; 
    font: 700 .67em/1.25em Arial; 
    text-align: center; 
    text-decoration: underline; 
    cursor: pointer; 
} 
.less { height: auto; display: none; } 
.more { display: none; } 

的Jquery:

if($(".info")[0].scrollHeight > $(".info").height()) { 
     $("a.more").show(); 
    } 

    $("a.more").click(function(e){ 
     e.preventDefault(); 
     $(".info").css({"overflow": "visible"}); 
     $("a.less").show(); 
     $("a.more").hide(); 
     return false; 
    }); 

    $("a.less").click(function(e){ 
     e.preventDefault(); 
     $(".info").css({"overflow": "hidden"}); 
     $("a.more").show(); 
     $("a.less").hide(); 
     return false; 
    }); 

正如您所看到的,頁腳停留在絕對位置。如果更多按鈕被點擊,則(更少)應該降低,低於應該來自頁腳。當瀏覽器收縮/展開時,是否可以動態啓用/禁用show more/less按鈕?

回答

3

設置max-height100%作秀越來越設置max-height180px演出時少。

Updated JSFiddle

+0

謝謝你幫助我。現在,我請求你做下面的事情。 1.轉到上面給出的更新的JSFiddle鏈接。 2.展開結果屏幕儘可能寬。 3.運行腳本。 4.現在,縮小結果屏幕。 隨着你越來越近,你可以看到最後的一些文字不見了。這是因爲您正在調整運行時的屏幕寬度。是否有可能編寫代碼來解決這個問題呢?謝謝你幫助我。 :-) –

+0

你的意思是當'info'高度低於'180px'時隱藏'show more'按鈕,當調整窗口大小時'info'高度超過'180px'時顯示然後按鈕? –

+0

檢查我的JSFiddle,我已經更新它。謝謝;) –

1

你不需要overflow永遠顯示,而不是僅僅增加max-height至100%。

$("a.more").click(function(e){ 
    e.preventDefault(); 
    $(".info").css({"max-height": "100%"}); 
    $("a.less").show(); 
    $("a.more").hide(); 
    return false; 
}); 

我還在一些填充中添加,以便您可以更輕鬆地看到文本。

Updated fiddle

這確實是一個問題,但使用innerHeight代替height可以將相應的文本與窗口大小調整填充溢出檢測:

$(window).resize(function(){ 
    if($(".info")[0].scrollHeight > $(".info").innerHeight()) { 
     $("a.more").show(); 
    } 
}); 

我也位於以下/以上按鈕絕對位於信息框的底部,以覆蓋可能延伸到填充的任何文本:

.info-wrapper a { 
     left: 0; bottom: 0; 
     width: 100%; 
     background: red; 
     position: absolute; 
     font: 700 .67em/1.25em Arial; 
     text-align: center; 
     text-decoration: underline; 
     cursor: pointer; 
     line-height: 20px; 
} 

完整的代碼是在this fiddle

+0

謝謝你幫助我。現在,我請求你做下面的事情。 1.轉到上面給出的更新的JSFiddle鏈接。 2.展開結果屏幕儘可能寬。 3.運行腳本。 4.現在,縮小結果屏幕。 隨着你越來越近,你可以看到最後的一些文字不見了。這是因爲您正在調整運行時的屏幕寬度。是否有可能編寫代碼來解決這個問題呢?謝謝你幫助我。 :-) –

+0

我在我的解決方案中看不到任何文字。展開後縮小屏幕時,它將包裝文本並展開紅色框。 – gaynorvader

+0

看看這個小提琴 - http://jsfiddle.net/rraagghhu/9dgs6432/21/ 在這種情況下,顯示更多/更少的按鈕必須被禁用。只有當div的高度超過180px,當它小於180px時會自動消失。 –

1

你沒有從CSS中刪除最大高度,這是什麼原因造成的問題。你可以做兩件事情在這裏:

  1. 要麼你可以設置max-height100%

  2. 或者,您可以設置在另一個CSS類max-height和添加和刪除類的信息格設置動態

創建CSS樣式:

.restrict{ 
    max-height: 180px; 
} 

在更多點擊:

$(".info").removeClass('restrict'); 

在少點擊:

$(".info").addClass('restrict'); 

見我分叉撥弄着變化:

https://jsfiddle.net/jdnf5vka/4/

+0

是的,我看到了小提琴。當您展開結果窗口時,由於整個文本被容納在div容器中,您可以看到show more按鈕不會消失。我請求您執行以下步驟, 1.轉到上面給出的更新的JSFiddle鏈接。 2.展開結果屏幕儘可能寬。 3.運行腳本。 4.現在,縮小結果屏幕。 隨着你越來越近,你可以看到最後的一些文字不見了。 –

+0

這是一個不同的問題。爲了克服這一點,你需要提供一個填充。而且,如果將結果窗口縮小到小於內容的結果窗口,則首先嚐試通過放置換行符而不是空白來容納文本。如果沒有要刪除的空白,那麼內容顯然會被剪輯或顯示在其他元素之上。 – inquizitive

1

是的,你可以啓用和禁用按鈕,因爲瀏覽器被調整大小。

你需要建立你的JavaScript是這樣的:

// make your function re-usable 
var buttonChecker = function() { 
    // show/hide buttons logic here 
} 

// bind the function to the resize event (note, no parenthesis for calling the function here, it's just a reference passed in that is then called when the resize event is triggered) 
$(window).on('resize', buttonChecker); 

// call your function on page load so the buttons are correctly shown then (note, parenthesis are used, function is called 
buttonChecker(); 

這當瀏覽器大小的顯示/隱藏按鈕的功能將被重新叫的方式。

PS - 這裏是OPs示例修正:http://jsfiddle.net/9dgs6432/20/ - 注意buttonChecker()函數的內容以及要隱藏和顯示的邏輯。

+0

是的,謝謝你的代碼。我已經在這裏實現了 http://jsfiddle.net/rraagghhu/9dgs6432/12/ 但是它只在show more/less按鈕第一次出現時才起作用。而且,當屏幕尺寸擴大到最大時,它不會消失。我會通過要求您執行以下操作來清除問題: 1.縮小結果屏幕2.運行腳本3.現在,展開結果窗口。即使文本容納在div中,仍然會顯示更多按鈕。有沒有什麼方法可以讓它可見/不可見?謝謝你幫助我。 –

+0

是的,它認爲你將不得不添加你的按鈕顯示邏輯到函數中,以便它可以調用'resize' - 你可以看到我的例子,該函數是空的,所以你需要填寫它: - )看到這個...修正:http://jsfiddle.net/9dgs6432/20/ - 注意我如何用邏輯填充函數,並且還添加了隱藏以及顯示的東西 –

+0

謝謝Toni Leigh!這段代碼很完美! :-) –

相關問題