2014-06-23 48 views
0

我正在使用Readmore.js插件。我爲以下問題查找了各種解決方案,但沒有一個似乎是完美的。下一篇文章展開時摺疊文章(Readmore.js - Extension)

我想添加一個函數,它摺疊先前展開的文章 - 如果有的話,當readmore被按下時。

感謝Josh,當文章展開/摺疊時,我設法將變量isOpen標記爲truefalse。現在我試圖找出如何在新文章展開時合攏文章。

<script> 
$('#info').readmore({ 

moreLink: '<a href="#">More examples and options</a>', 
maxHeight: 390, 
afterToggle: function(trigger, element, expanded) { 
if(! expanded) { // The "Close" link was clicked 
$('html, body').animate({ scrollTop: element.offset().top }, {duration: 100 }); 
} 
} 
}); 

$('article').readmore({maxHeight: 240}); 


var isOpen = true; 
$('article').readmore({ 
afterToggle: function(trigger, element, expanded) { 

if (expanded) { 
    isOpen = true; 
} 
if(! expanded) { 
    isOpen = false; } 
    } 
}); 

$('article').readmore({ 
beforeToggle: function(trigger, element, expanded) { 

if (isOpen) { 

} 
    } 
}); 
    </script> 

由於已經...

+0

作爲一個提示,不要試圖找出哪一個是打開的 - 將它們全部摺疊並打開你想要的!摺疊它們都不會造成任何有害的影響,因爲沒有任何事情會發生在那些已經崩潰的地方。 – Moo

回答

0

由於Readmore.js adds a class to expanded blocks可以識別並通過這樣的關閉它們:

$('article').readmore({ 
    beforeToggle: function(trigger, element, expanded) { 
     $('.readmore-js-expanded').readmore('close'); 
    } 
}); 

編輯:鑑於Readmore.js做似乎沒有提供一種「關閉」方法,您可能需要通過觸發錨點上的關閉事件來僞造該方法:

$('article').readmore({ 
    lessLink:  '<a class="readmore-lesslink">Show less</a>', 
    beforeToggle: function(trigger, element, expanded) { 
     $('.readmore-js-expanded') 
      .find('a.readmore-lesslink') 
       .trigger('click'); 
    } 
}); 

我沒有測試過這個,但它應該讓你開始我猜。

+0

它不起作用。我有點不確定如何識別問題。按照我的想象,我將代碼放在index.html中,使用''。最初我想過使用類似於:'document.getElementByClass(「。readmore-js-toggle」).addEventListener(「click」,function(){...});',但也不成功。 – Aleexx

0

試試這個。它正在爲我工​​作:

$('article').readmore({ 
     collapsedHeight: 80px; 
     lessLink: '<a class="readmore-lesslink">Show less</a>', 
      beforeToggle: function(trigger,element,more) { 
      $(element).siblings("a.readmore-lesslink").not($(element).next()).trigger("click"); 
      } 
    });