Javascript 基于html长度调整字体大小

Javascript 基于html长度调整字体大小,javascript,jquery,css,font-size,Javascript,Jquery,Css,Font Size,我知道有很多类似的帖子,但到目前为止我还没能解决这个问题 上下文: 用户选择一个家, 家庭有独特的头衔, 根据标题,调整字体大小以防止溢出 JS小提琴: 字体大小是根据html的长度,但我需要这是反应。我尝试创建.on(“更改”)事件,但未能正确实现。帮忙 现在我正在从控制台更新标题, $('#title').html(“大而长的描述物”) 但是,这将在将来通过从模式菜单中选择来完成。EDIT 好的,现在我明白了。你的JS应该是这样的: $(function() { $('#title'

我知道有很多类似的帖子,但到目前为止我还没能解决这个问题

上下文:
用户选择一个家,
家庭有独特的头衔,
根据标题,调整字体大小以防止溢出

JS小提琴:

字体大小是根据html的长度,但我需要这是反应。我尝试创建.on(“更改”)事件,但未能正确实现。帮忙

现在我正在从控制台更新标题,
$('#title').html(“大而长的描述物”)

但是,这将在将来通过从模式菜单中选择来完成。

EDIT

好的,现在我明白了。你的JS应该是这样的:

$(function() {
    $('#title').on('DOMSubtreeModified', function() {
        var title = $('#title'),
            planName = title.html().length;

        // depending on html length, update font-size
        if(planName > 30) {
            title.css('font-size', '10px');
        } else if(planName > 20) {
            title.css('font-size', '12px');
        } else if(planName > 10) {
            title.css('font-size', '15px');
        }
    });

     $('li').on('click', function() {
         $('#title').text( $(this).text() );
     });
});
每当元素的内容发生更改时(因为这会修改DOM子树),DOMSubtreeModified应该激发。“点击”部分不是必需的,但我保留它用于测试目的

根据,Opera不支持此活动,IE 9及以下版本可能不支持或有缺陷

有关更多选项和信息,请查看以下其他StackOverflow问题:


根据您所说,用户将“选择一个单元”:

用例: 用户选择一个单元, 单位有独特的名称, 根据标题,调整字体大小以防止溢出

因此,作为此操作的一部分,您需要更改字体大小。我用你的代码做了一个例子:

HTML

试着点击列表中的图标。看到了吗?作为对“更改单元”的响应,标题和字体大小会更改

如果此答案对您没有帮助,请提供更多详细信息。

编辑

好的,现在我明白了。你的JS应该是这样的:

$(function() {
    $('#title').on('DOMSubtreeModified', function() {
        var title = $('#title'),
            planName = title.html().length;

        // depending on html length, update font-size
        if(planName > 30) {
            title.css('font-size', '10px');
        } else if(planName > 20) {
            title.css('font-size', '12px');
        } else if(planName > 10) {
            title.css('font-size', '15px');
        }
    });

     $('li').on('click', function() {
         $('#title').text( $(this).text() );
     });
});
每当元素的内容发生更改时(因为这会修改DOM子树),DOMSubtreeModified应该激发。“点击”部分不是必需的,但我保留它用于测试目的

根据,Opera不支持此活动,IE 9及以下版本可能不支持或有缺陷

有关更多选项和信息,请查看以下其他StackOverflow问题:


根据您所说,用户将“选择一个单元”:

用例: 用户选择一个单元, 单位有独特的名称, 根据标题,调整字体大小以防止溢出

因此,作为此操作的一部分,您需要更改字体大小。我用你的代码做了一个例子:

HTML

试着点击列表中的图标。看到了吗?作为对“更改单元”的响应,标题和字体大小会更改

如果此答案对您没有帮助,请提供更多详细信息。

编辑

好的,现在我明白了。你的JS应该是这样的:

$(function() {
    $('#title').on('DOMSubtreeModified', function() {
        var title = $('#title'),
            planName = title.html().length;

        // depending on html length, update font-size
        if(planName > 30) {
            title.css('font-size', '10px');
        } else if(planName > 20) {
            title.css('font-size', '12px');
        } else if(planName > 10) {
            title.css('font-size', '15px');
        }
    });

     $('li').on('click', function() {
         $('#title').text( $(this).text() );
     });
});
每当元素的内容发生更改时(因为这会修改DOM子树),DOMSubtreeModified应该激发。“点击”部分不是必需的,但我保留它用于测试目的

根据,Opera不支持此活动,IE 9及以下版本可能不支持或有缺陷

有关更多选项和信息,请查看以下其他StackOverflow问题:


根据您所说,用户将“选择一个单元”:

用例: 用户选择一个单元, 单位有独特的名称, 根据标题,调整字体大小以防止溢出

因此,作为此操作的一部分,您需要更改字体大小。我用你的代码做了一个例子:

HTML

试着点击列表中的图标。看到了吗?作为对“更改单元”的响应,标题和字体大小会更改

如果此答案对您没有帮助,请提供更多详细信息。

编辑

好的,现在我明白了。你的JS应该是这样的:

$(function() {
    $('#title').on('DOMSubtreeModified', function() {
        var title = $('#title'),
            planName = title.html().length;

        // depending on html length, update font-size
        if(planName > 30) {
            title.css('font-size', '10px');
        } else if(planName > 20) {
            title.css('font-size', '12px');
        } else if(planName > 10) {
            title.css('font-size', '15px');
        }
    });

     $('li').on('click', function() {
         $('#title').text( $(this).text() );
     });
});
每当元素的内容发生更改时(因为这会修改DOM子树),DOMSubtreeModified应该激发。“点击”部分不是必需的,但我保留它用于测试目的

根据,Opera不支持此活动,IE 9及以下版本可能不支持或有缺陷

有关更多选项和信息,请查看以下其他StackOverflow问题:


根据您所说,用户将“选择一个单元”:

用例: 用户选择一个单元, 单位有独特的名称, 根据标题,调整字体大小以防止溢出

因此,作为此操作的一部分,您需要更改字体大小。我用你的代码做了一个例子:

HTML

试着点击列表中的图标。看到了吗?作为对“更改单元”的响应,标题和字体大小会更改


如果这个答案对您没有帮助,请提供更多详细信息。

我可能会结合一些CSS来防止文本被包装,然后我会使用一些脚本来测量渲染文本的长度。如果它比预先确定的最大宽度长,请使用脚本应用CSS转换

#title {
  white-space: nowrap;
  display: inline-block; /* necessary for the scale to actually work */
  transform-origin: 0% 100%; /* set transform origin to bottom left corner of the title element */
}

.maxwidth-container {
  width: 400px;
}
然后在脚本中:

var scaleTitle = function() {

  var $title = $("#title");
  var maxWidth = $(".maxwidth-container").width();
  $title.css("transform","scale(1,1)"); //reset to normal scale in order to measure natural width

  if ($title.width() > maxWidth) {
    var scaleAmt = maxWidth / $title.width();
    $title.css("transform" , "scale(" + scaleAmt + "," + scaleAmt + ")");
  }

};
在您的例子中,我将您的
#title
元素包装在一个容器中,该容器指定了最大大小,但您可以使用一个显式的设置量

每次用户选择家庭时调用此函数

示例如下:

我可能会结合一些CSS来防止文本被包装,然后我会使用一些脚本来测量渲染文本的长度。如果它比预先确定的最大宽度长,请使用脚本应用CSS转换

#title {
  white-space: nowrap;
  display: inline-block; /* necessary for the scale to actually work */
  transform-origin: 0% 100%; /* set transform origin to bottom left corner of the title element */
}

.maxwidth-container {
  width: 400px;
}
然后在脚本中:

var scaleTitle = function() {

  var $title = $("#title");
  var maxWidth = $(".maxwidth-container").width();
  $title.css("transform","scale(1,1)"); //reset to normal scale in order to measure natural width

  if ($title.width() > maxWidth) {
    var scaleAmt = maxWidth / $title.width();
    $title.css("transform" , "scale(" + scaleAmt + "," + scaleAmt + ")");
  }

};
在您的例子中,我将您的
#title
元素包装在一个容器中,该容器指定了最大大小,但您可以使用一个显式的设置量

每次用户选择家庭时调用此函数

示例如下:

我可能会结合一些CSS来防止文本被包装,然后我会使用一些脚本来测量渲染文本的长度。如果它比预先确定的最大宽度长,请使用脚本应用CSS转换

#title {
  white-space: nowrap;
  display: inline-block; /* necessary for the scale to actually work */
  transform-origin: 0% 100%; /* set transform origin to bottom left corner of the title element */
}

.maxwidth-container {
  width: 400px;
}
然后在脚本中:

var scaleTitle = function() {

  var $title = $("#title");
  var maxWidth = $(".maxwidth-container").width();
  $title.css("transform","scale(1,1)"); //reset to normal scale in order to measure natural width

  if ($title.width() > maxWidth) {
    var scaleAmt = maxWidth / $title.width();
    $title.css("transform" , "scale(" + scaleAmt + "," + scaleAmt + ")");
  }

};
在您的情况下,我将您的
#title
元素包装在一个c中