【发布时间】:2020-01-14 10:59:08
【问题描述】:
我正在开发一个 JavaScript 动画库并遇到了一个问题:所有值通常使用此默认函数以 像素 为单位返回:
window.getComputedStyle(element).getPropertyValue(property);
但是,当像这样获取背景位置的值时:
window.getComputedStyle(element).getPropertyValue('background-position');
结果是50% 50%(背景位置:中心)。如何将值转换为像素?我编写了以下函数,但它给了我错误的结果,原因是背景位置的百分比也与图像大小有关。
var pixelsX = (parseFloat(percentX) / 100 * element.offsetWidth) + 'px';
var pixelsY = (parseFloat(percentY) / 100 * element.offsetHeight) + 'px';
我也无法使用 Image() 获得大小,因为计算必须实时进行,我不能等待图像加载。
谢谢!
【问题讨论】:
-
问题是在某些情况下我可能知道图像的大小,我需要在不加载图像的情况下计算它。
-
位置是相对于容器和“背景大小”的,在我的例子中是“自动”,所以我不知道背景的大小。
-
如果我的容器是 100px x 100px 并且“背景位置”设置为“50% 50%”,则转换将为“50px 50px”。这不等于“50% 50%”,因为它将背景图像的左上角设置为“50px 50px”。
-
对于后一个问题,由于没有加载图像,您就不能使用 onLoad 启动动画吗?
<body onload="startAnimation()"> -
您要么知道图像的大小,要么知道背景大小的值来进行计算。更多细节在这里:stackoverflow.com/a/51734530/8620333 您将在“像素值与百分比值之间的关系”部分中找到公式
标签: javascript css animation background-position