【问题标题】:Get width of a button using JS?使用JS获取按钮的宽度?
【发布时间】:2020-04-14 23:29:15
【问题描述】:

我在 index.html 中有一个按钮,它是在 html 文件而不是 javascript 文件中创建的。我正在尝试使用纯 JavaScript 获取按钮的宽度。我没有使用 jQuery,也不会选择任何其他 JS 库。我尝试过的:

  function resizeButtom() {
        var btn = document.getElementById('btn-resize-me');
        alert(btn.style.width); // alerts blank
        alert(parseInt(btn.style.width); // alerts NaN, because the value is a blank
        btn.style.width = toString(parseInt(btn.style.width) - 20) + "px"; // does not work!
    }
<button id="btn-resize-me" onClick="resizeButton();"></button>

样式表.css

.menu-btn {
    background-color: #F3F2F1;
    border: none;
    color: black;
    padding: 7px 12px 7px;
    text-align: center;
    text-decoration: none;
    display: block;
    font-size: 20px;
    float: left;
    height: 100%;
    width:auto;
}

我无法设置按钮宽度,因为它是浏览器上加载的字体宽度(默认字体可能不会在特定浏览器上加载)与左侧和右侧 14px、7px 填充的总和。

动机: 当我按下一个按钮时,我希望另一个按钮获得 1px 纯黑色的边框。这是完美的,但是由于边框,按钮的宽度大了 2px,将其他菜单项按钮移动了 2px,这看起来很奇怪。我虽然将更改后的按钮(现在带有边框:1px 纯黑色;)调整为 2px 可以解决这个问题。答案提供了一种调整大小的方法,但它是近似的,导致新的大小,保持填充,看起来不自然和丑陋。

【问题讨论】:

  • 你拼写错了resizeButton,你需要在Javascript的第4行多写一个)
  • 添加通过字体大小和填充设置btn宽度的代码:)

标签: javascript button resize


【解决方案1】:

您可以使用 offsetWidth 检索它,也可以设置不需要的 btn 的宽度 toString : 更新:添加了更改按钮的字体大小。

function resizeButton() {
        var btn = document.getElementById('btn-resize-me');
        alert(parseInt(btn.offsetWidth)); 
        btn.style.width = (parseInt(btn.offsetWidth) - 20)+"px";  btn.style.fontSize = "12px";
 alert(parseInt(btn.style.width)); 
    }
#btn-resize-me {
    background-color: #F3F2F1;
    border: 1ox solid gray;;
    color: black;
    padding: 7px 12px 7px;
    text-align: center;
    text-decoration: none;
    display: block;
    font-size: 20px;
    float: left;
    height: 100%;
    width:auto;
}
<button id="btn-resize-me"  onClick="resizeButton()">hello</button>

【讨论】:

  • 我无法设置宽度,因为它取决于用户的网络浏览器以及它如何显示字体/文本。当前宽度是字体大小宽度 + 14px,因为左右两边有 7px 的内边距。
  • @RealAnwersOnly 但不知何故必须在这里进行测试。 :)
  • @RealAnwersOnly 只测试上面没有设置宽度的代码就可以了。
  • 我的网站上有上面的代码,但它不起作用。这就是我问@Mohammad 的原因。尝试访问宽度时未设置宽度会导致空白。空白不是数字。因此我无法获得按钮的宽度。
  • 对不起,这是正确的!然而,上面代码的问题是按钮内的文本不再居中,宽度只是被拉到左边(变得更小,更靠近按钮文本)。这看起来很丑,不是我想要的。我也有文本对齐:中心。另外:文本的初始宽度为 14.213,但在将其变小然后变大后,宽度不再是 14.213。
【解决方案2】:

function resizeButton() {
    var btn = document.getElementById('btn-resize-me');
    alert(btn.offsetWidth); // alerts 
    btn.style.width = Math.max(btn.offsetWidth - 20, 0) + "px"; // works
    //the width is reduced by about 20, until it can't
}
<button id="btn-resize-me" onClick="resizeButton();" style="width: auto; overflow: hidden;">Some Text</button>

【讨论】:

  • 我无法设置宽度,因为它取决于用户的网络浏览器以及它如何显示字体/文本。当前宽度是字体大小宽度 + 14px,因为左右两侧有 7px 的填充。
  • 您可以将宽度设置为大于显示最宽的网络浏览器的宽度。您可以使用initial 设置为默认宽度,但是当您获得宽度时,您无法减去它。此外,使宽度小于默认值将切断文本。
  • 当我将按钮设置为大于网络浏览器宽度时,我的网站会损坏。在这个例子中设置初始值是没有意义的,因为我想编辑宽度。
  • 该答案将在按下按钮约 5 次后使按钮的宽度为 0,从而导致所述按钮右侧的按钮直接位于所述按钮内的文本旁边。这绝对不是我的用户想要体验的。
  • 您需要删除填充以使其完全为零。否则,您可以删除/隐藏该元素。
猜你喜欢
  • 2013-05-31
  • 1970-01-01
  • 2013-10-24
  • 2018-02-09
  • 1970-01-01
  • 2011-12-08
  • 2013-07-19
  • 1970-01-01
  • 2019-07-08
相关资源
最近更新 更多