2016-03-22 1 views
6

Sto cercando di creare una direttiva con il seguente functionalty:angolare - tooltip quando le interruzioni di linea

quando le interruzioni di riga (non più luogo nel div) verrà creato un tooltip (con il testo completo) e il il testo verrà tagliato e sostituito da 3 punti.

example

tutto quello che ho trovato finora è per il multi linea, il migliore che ho ottenuto è questa:

css:

.trim-info { 
    max-width: 50px; 
    display: inline-block; 
    overflow: hidden; 
    text-overflow: ellipsis; 
    white-space: nowrap; 
    line-height: 15px; 
    position: relative; 
} 

modello:

'<div class="trim-info" uib-tooltip="{{lineCtrl.text}}">{{lineCtrl.text}}</div>' 

Ma, come puoi vedere la larghezza è hardcoded. La mia domanda è come posso renderlo dinamicamente alla larghezza genitore.

+0

ciò che è hardcoded? lo hai già usato varibles di ambito lì .. –

+0

la larghezza è hard coded, è impostato su 50 px –

+0

Non dovresti aver bisogno di hardcode la larghezza, il tooltip normalmente eredita il genitore div width –

risposta

6

in CSS si può fare

.parent-div { 
    display: flex; 
} 

.text-div { 
    white-space: nowrap; 
    overflow: hidden; 
    text-overflow: ellipsis;  
    min-width: 0; 
} 

Nella vostra direttiva è possibile controllare

angular.module('myApp').directive('tooltip', function() { 
    function isEllipsisActive(e) { 
     return (e.offsetWidth < e.scrollWidth); 
    } 
    return { 
     restrict: 'E', 
     link: function(scope, el, attr) { 
      var addTooltip = isEllipsisActive(el); 
     } 
    }; 
} 

E poi a seconda di questo valore di abilitazione tooltip.

+0

clientWidth e scrollWidth potrebbero funzionare anche – ryansstack

0

Ecco un modo davvero semplice per farlo con un po 'di jQuery. Lo stile è a voi :)

$('.tooltip-bottom').each(function() { 
 
    var after = $(this).clone(); 
 
    after.removeClass('tooltip-bottom') 
 
     .removeClass('small') 
 
     .addClass('tooltip') 
 
     .css({"position": "absolute", 
 
      "top": ($(this).position().top + $(this).height()) + "px", 
 
      "left": $(this).position().left + "px"}); 
 
    
 
    $('.MyContainer').append(after); 
 
});
.small { 
 
    width: 50px; 
 
    height: 15px; 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
    white-space: nowrap; 
 
} 
 
.tooltip { 
 
    display: none; 
 
    transition: all 0.5s; 
 
} 
 
.small:hover ~ .tooltip { 
 
    display: block; 
 
    overflow-x: visible; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="MyContainer"> 
 
    <div class="small tooltip-bottom">this is a very small div</div> 
 
</div>