运动框架的单位是px
贴上代码:
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
function startMove1(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var bStop = true; //所有值都已经到达
for (var attr in json) {
//去当前值
var iCur = 0;
if (attr == 'opacity') {
iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
} else {
iCur = parseInt(getStyle(obj, attr));
}
//算速度
var iTarget = json[attr];
var bodyWith = document.body.offsetWidth;
var newTarget = 0;
if (attr == 'marginLeft' || attr == 'width') {
newTarget = Math.floor(bodyWith * iTarget / 100);
} else {
newTarget = iTarget;
}
var iSpeed = (newTarget - iCur) / 5;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
if (iCur != newTarget) {
bStop = false;
}
if (attr == 'opacity') {
obj.style.filter = 'alpha(opacity=' + (iCur + iSpeed) + ')'; //优先级
obj.style.opacity = (iCur + iSpeed) / 100;
} else {
obj.style[attr] = iCur + iSpeed + 'px ';//终结果这里是px单位结尾
}
}
if (bStop) {
if(attr == 'marginLeft' || attr == 'width')
{
var numBefore = parseInt(getStyle(obj,attr));
var numAfter = Math.floor(numBefore/bodyWith*100);
obj.style[attr] = numAfter + '%';//尝试转化但不能动态获值或赋值
}
else
{
clearInterval(obj.timer);
}
if (fn) {
fn();
}
}
}, 30)
}
突出的主要问题:
你好,试一下我修改后的代码
function getStyle(obj, attr) {
if (obj.currentStyle) {
return obj.currentStyle[attr];
} else {
return getComputedStyle(obj, false)[attr];
}
}
function startMove1(obj, json, fn) {
clearInterval(obj.timer);
obj.timer = setInterval(function () {
var bStop = true; //所有值都已经到达
for (var attr in json) {
//去当前值
var iCur = 0;
var unit = '';
if (attr == 'opacity') {
iCur = parseInt(parseFloat(getStyle(obj, attr)) * 100);
} else {
var curStyle = getStyle(obj, attr);
iCur = parseInt(curStyle);
unit = curStyle.match(/[a-z]+$/i); // 获取属性的单位
unit = unit ? unit[0] : 'px'; // 如果没有单位,则默认为px
}
//算速度
var iTarget = json[attr];
var bodyWith = document.body.offsetWidth;
var newTarget = 0;
if (unit === '%') {
newTarget = Math.floor(bodyWith * iTarget / 100);
} else {
newTarget = iTarget;
}
var iSpeed = (newTarget - iCur) / 5;
iSpeed = iSpeed > 0 ? Math.ceil(iSpeed) : Math.floor(iSpeed);
if (iCur != newTarget) {
bStop = false;
}
if (attr == 'opacity') {
obj.style.filter = 'alpha(opacity=' + (iCur + iSpeed) + ')'; //优先级
obj.style.opacity = (iCur + iSpeed) / 100;
} else {
obj.style[attr] = iCur + iSpeed + unit;
}
}
if (bStop) {
for (var attr in json) {
if (attr == 'marginLeft' || attr == 'width') {
var numBefore = parseInt(getStyle(obj, attr));
var numAfter = Math.floor(numBefore / bodyWith * 100);
obj.style[attr] = numAfter + '%';
}
}
clearInterval(obj.timer);
if (fn) {
fn();
}
}
}, 30);
}