2015-09-27 154 views
0

我在一行中有一个文本(空白:nowrap)。 如果宽度大于父块的宽度,我想减小此文本的字体大小。为什么while循环不起作用?

我使用while循环。为什么它不起作用? “elemWidth”的宽度没有更新,循环和循环冻结?

$('.slider__title-wrap').each(function(){ 
    var width = $(this).width(); 
    var fontSize = 50; 
    var elem = $(this).find('.slider__title'); 
    var elemWidth = elem.width(); 

    while(elemWidth >= width) { 
     fontSize = Math.floor(fontSize * 0.96); 
     elem.css({fontSize: fontSize+'px'}); 
    }; 
}) 
+2

你似乎没有被改变或者'elemWidth'或'width'里面的'而'循环。所以它要么永远不会开始,要么永远不会结束。 – Blazemonger

+0

这里你不需要'while'。您需要一个主动侦听器来改变大小 – karthikr

+0

当减小elemWidth的字体大小时,宽度会发生变化(内嵌块),但是在循环宽度中不会更改,为什么? – jydralaro

回答

2
var elemWidth = elem.width(); 

使得elem.width();

您需要重新评估elemWidth到你的循环副本:

$('.slider__title-wrap').each(function(){ 
    var width = $(this).width(); 
    var fontSize = 50; 
    var elem = $(this).find('.slider__title'); 
    var elemWidth = elem.width(); 

    while(elemWidth >= width) { 
     fontSize = Math.floor(fontSize * 0.96); 
     elem.css({fontSize: fontSize+'px'}); 
     elemWidth = elem.width(); 
    }; 
}) 
+0

谢谢,它解决了我的问题) – jydralaro

0

你似乎没有被改变或者elemWidthwidthwhile循环中。所以它要么永远不会开始,要么永远不会结束。您需要循环结束之前更新你比较值:

$('.slider__title-wrap').each(function(){ 
    var width = $(this).width(); 
    var fontSize = 50; 
    var elem = $(this).find('.slider__title'); 
    var elemWidth = elem.width(); 

    while(elemWidth >= width) { 
     fontSize = Math.floor(fontSize * 0.96); 
     elem.css({fontSize: fontSize+'px'}); 
     width = $(this).width(); 
     elemWidth = $(this).find('.slider__title').width(); 
    }; 
}); 

另外,消除变量,使您不必进行任何更新:

$('.slider__title-wrap').each(function(){ 
    var fontSize = 50; 

    while($(this).width() >= $(this).find('.slider__title').width()) { 
     fontSize = Math.floor(fontSize * 0.96); 
     elem.css({fontSize: fontSize+'px'}); 
    }; 
}); 

顺便说一句,我会使用fontSize = fontSize-1;,而不是乘以0.96,但它可能是一个微型优化。

相关问题