在Javascript中获取背景位置的posX和posY

Hom*_*ith 3 javascript css parsing

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

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

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

Dav*_*mas 13

给出以下HTML:

<div id="demo"></div>
Run Code Online (Sandbox Code Playgroud)

和CSS:

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

以下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);
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

上述方法确实需要一个支持window.getComputedStyle()(显然)的浏览器,并且trim()(尽管可以用a代替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);
Run Code Online (Sandbox Code Playgroud)

JS小提琴演示.

至于如果没有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;
}
Run Code Online (Sandbox Code Playgroud)

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

参考文献: