2017-02-03 17 views
0

divにカーソルを置くと、オーバーフローチェックを実行しようとしています。しかし、私はホバー機能のためにjQueryを使用し、次の機能には単純なJavascriptがあります。 jQuery関数の中でif then関数を使うことができないと仮定しているので動作しませんが、if then関数を実行する必要があるという動作が必要です。誰かが私を助けることができますか? =)jQuery関数のIF関数

だから、jQueryの(ホバー) - > JS(オーバーフローをチェックしてください) - > jQueryの(ここで(DIVに追加します。 "...続きを読む..."))

HTML:

<div class="hover_cap"> 
<div class="hcd"> 
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 
</div> 
</div> 

CSS:

.hover_cap { 
    width:150px; 
    max-height: 17.5ex; 
    border: 1px solid red; 
} 

.hcd { 
    line-height:2.5ex; 
    max-height:12.5ex; 
    margin: 10px; 
    border: 1px solid green; 
    overflow: hidden; 
} 

.readmore { 
    padding: 0px 10px 10px 10px; 
} 

JS:

$('.hover_cap').hover(

    if (function checkOverflow(hcd) { 
     var curOverflow = hcd.style.overflow; 

     if (!curOverflow || curOverflow === "hidden") hcd.style.overflow = "visible"; 

     var isOverflowing = hcd.clientWidth < hcd.scrollWidth || hcd.clientHeight < hcd.scrollHeight; 

     hcd.style.overflow = curOverflow; 

     return isOverflowing; 
    }) { 

    function() { 
     $(this).append($('<a>...read more...</a>')); 
    }, 
    function() { 
     $(this).find("a:last").remove(); 
    } 
    } 
} 
+0

念のために、あなたはホバー機能がisOverflowingがtrueの場合にのみ動作する必要があることを求めていますか? –

+0

javascriptのコールバックについて読む。 checkOverflow関数では、isOverflowingがtrueであればコールバックを渡します。実行する内容に応じて実行します。 「コールバック関数を実装する際の基本原則」を読んでください。 http://javascriptissexy.com/understand-javascript-callback-functions-and-use-them/ – psycho

+0

@ er-hanいいえ反対の話です。テキストは、isOverflowingがtrueのときに追加し、div =にマウスオーバーするとオーバーフローをチェックする必要があります) –

答えて

0

ここにあなたのスニペットがあります: 外側のdivをホバリングすると、内側のdivのテキストがオーバーフローしている場合、外側のdivに 'readmore'ボタンを追加します。 外側のdivをアンハーバーするときに、追加された 'readmore'ボタンがある場合は削除します。

function isOverflowed(element){ 
 
    return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth; 
 
} 
 

 
$(document).ready(function(){ 
 
    $('.hover_cap').hover(function(){ 
 
    var $this = $(this); 
 
    var $textContainer = $this.find('.hcd'); 
 
    $textContainer.css('overflow','auto'); 
 
    var isOverflowing = isOverflowed($textContainer[0]); 
 
    $textContainer.css('overflow','hidden'); 
 
    if(isOverflowing) { 
 
     $this.append($('<a>...read more...</a>')); 
 
    } 
 
    }, function(){ 
 
    var $this = $(this); 
 
    var lastA = $this.find("a:last"); 
 
    if(lastA) { 
 
     lastA.remove(); 
 
    } 
 
    }) 
 
})
.hover_cap { 
 
    width:150px; 
 
    max-height: 17.5ex; 
 
    border: 1px solid red; 
 
} 
 

 
.hcd { 
 
    line-height:2.5ex; 
 
    max-height:12.5ex; 
 
    margin: 10px; 
 
    border: 1px solid green; 
 
    overflow: hidden; 
 
} 
 

 
.readmore { 
 
    padding: 0px 10px 10px 10px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="hover_cap"> 
 
<div class="hcd"> 
 
Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum Lorem Ipsum 
 
</div> 
 
</div> 
 

 
<br/> 
 
<br/> 
 

 
<div class="hover_cap"> 
 
<div class="hcd"> 
 
Short text, no overflow 
 
</div> 
 
</div>

+0

詳細な回答をありがとう^^実際には、オーバーフローがまだ隠れていることを願っていますが、コードを変更するのは問題ありません:)^_^ –

+0

@DidiKong申し訳ありませんが、私の間違いです。私は虚偽を理解していた。今すぐスニペットを修正しました。オーバーフローは常に隠されています。あなたは歓迎です、ところで:) –

+0

うわー、あなたに感謝しました。あなたが投稿したコードを調整しようとした後に、私が望む結果を得ました= D –