jQuery 将 padding-top 计算为 px 中的整数

Posted

技术标签:

【中文标题】jQuery 将 padding-top 计算为 px 中的整数【英文标题】:jQuery calculate padding-top as integer in px 【发布时间】:2011-03-17 18:41:33 【问题描述】:

我找到的唯一解决方案是($(this).innerHeight() - $(this).height()) / 2

但是 /2 不是正确的选项,因为用户可以有 padding-top:0px 和 padding-bottom:20px。

有没有办法使填充值更准确?

我在考虑 css('padding-top') 然后解析它,只取 int 部分,但值可以在“em”中而不是在“px”中

然后为每个值类型做 switch 语句?对于 em 一个,对于 px 另一个?

这有点复杂,而且在代码中占用更多空间......

【问题讨论】:

【参考方案1】:

jQuery 的主要优势之一是它的可插拔性,因此,如果您的需求不能立即被该库满足,那么可以搜索大量插件。如果没有人可以满足您的需求,那么您自己的滚动非常容易。 我认为正确的方法是,如果你找不到一个可以做你想做的插件,最后一个:编写你自己的。

但是,请确保您自己清楚插件的规格。如果元素没有用于填充的 css 设置,它应该返回什么?它应该返回此元素的样式还是计算的样式?无效的 css 会发生什么(比如 'padding-top: 10 unitsThatDontExist;' 或 'padding-left: two;')?

致get you started - 这是使用您自己的插件在您的代码中的样子:

var topPadding = $('#anElement').padding('top');

要使其可用,只需编写一个像这样的插件:

$.fn.padding(direction) 
    // calculate the values you need, using a switch statement
    // or some other clever solution you figure out

    // this now contains a wrapped set with the element you apply the 
    // function on, and direction should be one of the four strings 'top', 
    // 'right', 'left' or 'bottom'

    // That means you could probably do something like (pseudo code):
    var intPart = this.css('padding-' + direction).getIntegerPart();
    var unit = this.css('padding-' + direction).getUnit();

    switch (unit)
    
        case 'px':
            return intPart;
        case 'em':
            return ConvertEmToPx(intPart)
        default:
            // Do whatever you feel good about as default action
            // Just make sure you return a value on each code path
    
;

【讨论】:

ParseInt(this.css("padding-"+direction)) 会将其转换为整数。 不,它没有。顺便说一句,“这个”应该被包裹起来。 @Psytronic,好的 - 很高兴知道! =) 但是,我故意没有在这个插件中编写所有代码,以使 OP 不得不实际使用它进行一些操作,而不仅仅是复制粘贴。这是一种更好的学习方式;) @Beck, this 不需要包装,因为插件方法中的函数上下文是匹配元素的包装集。 parseInt() 将转换为整数,ParseInt() 是不正确的调用【参考方案2】:

据我所知,在请求 .css("padding-top") 时,jQuery 中使用了 getComputedSyle 和跨浏览器等效项,因此它们应该已经转换为像素。

另外一种计算padding的方法如下

$.fn.padding = function () 
    // clone the interesting element
    // append it to body so that CSS can take effect
    var clonedElement = this.
        clone().
        appendTo(document.body);

    // get its height
    var innerHeight = clonedElement.
        innerHeight();

    // set its padding top to 0
    clonedElement.css("padding-top","0");

    // get its new height
    var innerHeightWithoutTopPadding = clonedElement.
        innerHeight();

    // remove the clone from the body
    clonedElement.remove();

    // return the difference between the height with its padding and without its padding
    return innerHeight - innerHeightWithoutTopPadding;

;

// Test it

console.log($("div").padding()); // prints 19 in Chrome 23
console.log($("div").css("padding-top")); // prints 19.733333587646484px

​ 位于:http://jsfiddle.net/oatkiller/9t9RJ/1/

【讨论】:

以上是关于jQuery 将 padding-top 计算为 px 中的整数的主要内容,如果未能解决你的问题,请参考以下文章

利用padding-top/padding-bottom百分比,进行占位和高度自适应

jQuery:HEX到RGB计算浏览器之间有什么不同?

删除style的样式JQuery

如何只执行一次 Jquery 代码?

jQuery + CSS。如何计算 innerHTML 的高度和宽度?

移动端布局方法rem