【问题标题】:Get posX and posY of background-position in Javascript在Javascript中获取背景位置的posX和posY
【发布时间】:2013-10-21 21:31:40
【问题描述】:

如果我假设背景位置将始终采用以下格式:

0px 0px; or 10px 11px; 所以,*number*px *number*px。

如何在 Javascript 中同时获取 x 位置和 y 位置?

【问题讨论】:

  • 您也想要单位,还是只想要数字?
  • 我正在寻找单位和数字。有没有 JS 函数可以告诉你这些?
  • 是通过类分配的吗?如果是这样,看看这个:stackoverflow.com/a/19458615/961695

标签: javascript css parsing


【解决方案1】:

给定以下 HTML:

<div id="demo"></div>

还有 CSS:

div {
    height: 500px;
    width: 500px;
    margin: 0 auto;
    background: #fff url(http://placekitten.com/300/300) 50% 50% no-repeat;
}

以下 JavaScript 有效:

var demo = document.getElementById('demo'),
    _tmp = window.getComputedStyle(demo,null).backgroundPosition.trim().split(/\s+/),
    positions = {
        'left' : _tmp[0],
        'top' : _tmp[1]
    };
console.log(positions, positions.left, positions.top);

JS Fiddle demo.

上述方法确实需要支持window.getComputedStyle()(显然)和trim()(尽管可以用replace(/^\s+|\s+$/g,'') 替换)的浏览器。

要独立访问单位和数字,我建议在整个对象中创建其他对象来保存这些数字和单位:

var demo = document.getElementById('demo'),
    _tmp = window.getComputedStyle(demo,null).backgroundPosition.trim().split(/\s+/),
    positions = {
        'left' : _tmp[0],
        'top' : _tmp[1],
        'numbers' : {
            'left' : parseFloat(_tmp[0]),
            'top' : parseFloat(_tmp[1])
        },
        'units' : {
            'left' : _tmp[0].replace(/\d+/,''),
            'top' : _tmp[1].replace(/\d+/,'')
        }
    };
console.log(positions, positions.left, positions.top, positions.numbers.left, positions.numbers.top, positions.units.left, positions.units.top);

JS Fiddle demo.

如果没有background-position 设置会发生什么?好吧,为什么不尝试一下,使用以下 CSS:

div {
    height: 500px;
    width: 500px;
    margin: 0 auto;
    background-color: #fff;
    background-image: url(http://placekitten.com/300/300);
    background-repeat: no-repeat;
}

在 Chromium 中,您似乎获得了 0% 0% 的默认 background-position(以及相应的数字和单位):JS Fiddle demo

参考资料:

【讨论】:

  • 这就是我要找的。但是,如果我想分别获取值和单位,我该怎么做呢?我的意思是,如果我需要知道做一些微积分的价值,然后是单位?
  • 另外,如果元素没有背景位置属性会发生什么?这会做什么:window.getComputedStyle(demo,null).backgroundPosition
  • 查看更新,我想我已经充分回答了这些问题?
猜你喜欢
  • 2011-02-10
  • 2020-01-14
  • 2017-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多