javascript - 如何防止 jQuery 意外的单位转换

标签 javascript jquery css cross-browser unit-conversion

假设我有代码:

var $element = $('<div/>');
$element.css("margin-left", "2cm");
console.log($element.css("margin-left"));

Chrome 没有给我任何东西,而 Firefox 给了我“75.5833px”。关于如何解决/解决这个问题有什么想法吗?我知道不在 DOM 中的 div 在检索浏览器解释为可计算单位的内容时可能会遇到困难,例如百分比和所有...基本上归结为我想要应用样式,包括速记样式,例如字体,背景和边距,并检索可以尽可能有效地分解它们的样式。

最佳答案

根据此:

How to access screen display’s DPI settings via javascript?

How to detect the screen DPI using JavaScript

Pixel to Centimeter?

我们可以假设:

1px = 0.02645833 cm;

1cm = 37.795276px;

因此您可以使用一个小函数将厘米转换为像素,该函数的计算如下:

function cmToPx(cm){
    return cm * 37.795276;
}

并像这样使用它:

element.css("margin-left", cmToPx(2));

此外,如果您想检索以厘米为单位的元素的值,您还可以使用另一个执行相反操作的函数:

function pxToCm(px){
    return parseInt(px) * 0.02645833;
}

并像这样检索值:

pxToCm(element.css("margin-left"))

不幸的是,它检索到的数字有误差范围(实际上,当我最初使用 2cm 时,它得到 1.98437475)。为了解决这个问题,也许你可以四舍五入该值。

我不知道为什么您的解决方案在 Chrome 上不起作用,但至少这是解决您的问题的可能方法。希望对您有所帮助,祝您好运!

pd:我离开jsfiddle:http://jsfiddle.net/79fM4/3/

关于javascript - 如何防止 jQuery 意外的单位转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23690263/

相关文章:

javascript - 对 Angular 和 rails 一起布线感到困惑

javascript - 有没有办法在标题案例方法中忽略首字母缩略词?

jQuery sortable live() 不排序

javascript - 每次用户滚动到 Chart.js 时,它的大小都会加倍

javascript - 显示 AM 但不显示年/月/日的 Datetime-local 值

html - : express + jade/ejs + html5 + css + websockets 的逻辑是什么

javascript - 如何只在数据推送完成时才执行回调?

javascript - JS 查找数组中项目的百分比

jquery - 使用 jquery 将事件从一个元素复制到另一个元素

javascript - AngularJS + Bootstrap : Two col-xs-6 columns will not align