ちょっとしたお知らせ一覧のページを作っています。
その中で本文が一定の行数を超えたら表示が切られ「続きを読む」が表示される機能を実装中つまずき質問させていただきました。
やりたいこととしては主に下記の3点です。
- 本文が3行以上の場合は「続きを読む」を表示
- 3行以下の場合は「続きを読む」を非表示
- 全文表示後に「閉じる」ボタンを表示
https://dezanari.com/jquery-trim-line-height/
こちらのページを参考に「続きを読む」「閉じる」が複数個ある場合も個別で動作するところまではできたのですが、個々のテキスト全体の高さを取得する部分がどうしてもうまくいきません。
ソースは現在、一番最初の高さを取得してしまうため、1つ目の項目が3行以上の場合は以降の項目が短くても「続きを読む」が表示されてしまい、逆に本文が短いと以降も動作しないもしくは2番目以降で1番目より長いものがあると閉じるボタンにかぶさるように表示されてしまいます。
ソースの「var textHeight = $text.height();」の部分を個々に所得して動作させるにはどうしたらいいでしょうか?
js
1<script> 2$(document).ready(function(){ 3 // 続きを読む 4 var $text = $('.more_txt'); // 本文 5 var $txt_open = $('.txt_open'); // 続きを読む 6 var $txt_close = $('.txt_close'); // 閉じる 7 var lineNum = 3; 8 var textHeight = $text.height(); // テキスト全体の高さ取得 9 var lineHeight = parseFloat($text.css('line-height')); // line-height取得 10 var textNewHeight = lineHeight * lineNum; // 指定行数までの高さ取得 11 12 if (textHeight > textNewHeight){ // 指定行数以上で作動 13 $text.css({ 14 height: textNewHeight, 15 overflow: 'hidden', 16 }); 17 18 $txt_open.click(function(){ // 続きを読む 19 $(this).next($txt_close).css('display', 'block'); // 閉じるを表示 20 $(this).css('display', 'none'); 21 $(this).prev(".more_txt").css({ 22 'height': textHeight, 23 'overflow': 'visible', 24 }); 25 }); 26 27 $txt_close.click(function(){ // 閉じる 28 $(this).prev($txt_open).css('display', 'block'); // 続きを読むを表示 29 $(this).css('display', 'none'); 30 $(this).prev().prev(".more_txt").css({ 31 height: textNewHeight, 32 overflow: 'hidden', 33 }); 34 }); 35 } else { 36 $txt_open.hide(); // 3行以下は非表示 37 } 38}); 39</script>
html
1<div> 2 <div class="box"> 3 <div class="more_txt"> 4 本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。 5 </div> 6 <a href="javascript:void(0)" class="txt_btn txt_open">続きを読む<ion-icon name="chevron-down-outline"></ion-icon></a> 7 <a href="javascript:void(0)" class="txt_btn txt_close">閉じる<ion-icon name="chevron-up-outline"></ion-icon></a> 8 </div> 9</div> 10 11<div> 12 <div class="box"> 13 <div class="more_txt"> 14 本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br> 15 本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。<br>本文が入ります。 16 </div> 17 <a href="javascript:void(0)" class="txt_btn txt_open">続きを読む<ion-icon name="chevron-down-outline"></ion-icon></a> 18 <a href="javascript:void(0)" class="txt_btn txt_close d_none">閉じる<ion-icon name="chevron-up-outline"></ion-icon></a> 19 </div> 20</div> 21 22<div> 23 <div class="box"> 24 <div class="more_txt"> 25 本文が入ります。<br>本文が入ります。 26 </div> 27 <a href="javascript:void(0)" class="txt_btn txt_open">続きを読む<ion-icon name="chevron-down-outline"></ion-icon></a> 28 <a href="javascript:void(0)" class="txt_btn txt_close d_none">閉じる<ion-icon name="chevron-up-outline"></ion-icon></a> 29 </div> 30</div>
回答1件
あなたの回答
tips
プレビュー