@clampthis/clampthis
Version:
A simple Javascript Library to enable multiline ellipses.
61 lines (55 loc) • 2.18 kB
JavaScript
$clampThis = function(selector, uParams){
lines = uParams.lines;
params = {
defaultLineHeight: 1.2,
};
for(var uParam in uParams){
params[uParam] = uParams[uParam];
}
elementMain = document.querySelectorAll(selector);
for(var e=0; e<elementMain.length; e++){
var element = elementMain[e];
if(typeof(element.clampThisText) == "undefined"){
element['clampThisText'] = element.textContent;
}
element['clampThisParams'] = params;
var style = window.getComputedStyle(element);
var lineHeight = style.getPropertyValue('line-height');
var fontSize = style.getPropertyValue('font-size');
console.log('initial line height: '+lineHeight);
if(lineHeight == "normal"){
lineHeight = params.defaultLineHeight*parseInt(fontSize);
}else{
lineHeight = parseInt(lineHeight)*params.defaultLineHeight;
}
// var maxHeight = (parseInt(fontSize)*lines)+(lineHeight);
var maxHeight = parseInt(lineHeight)*lines;
console.log("one line= "+parseInt(lineHeight));
console.log(maxHeight);
if(typeof(element.clampThisText) == "undefined"){
var text = element.textContent;
}else{
var text = element.clampThisText;
}
element.textContent = '';
for(var i=0; i<text.length; i++){
element.textContent += text[i];
element.textContent += "...";
if(element.clientHeight == maxHeight){
break;
}else if(element.clientHeight > maxHeight){
element.textContent = element.textContent.slice(0, -6);
element.textContent += "...";
break;
}else{
element.textContent = element.textContent.slice(0, -3);
if(i == element.textContent.length){
break;
}
}
}
}
}
window.addEventListener('resize', function(event){
var allClamped = document.getElementsByClassName('_clampThis_clamped_');
});