gpt4 book ai didi

javascript - 使用 JavaScript 动画化 css 转换

转载 作者:行者123 更新时间:2023-11-29 15:42:03 24 4
gpt4 key购买 nike

我有一个具体问题和一个一般问题。

我必须使用 javascript(没有框架)为拖动设置动画,我认为最好使用 translate() 而不是更改顶部和左侧,至少为了更好的性能。

但它是用户驱动界面的一部分,所以我不能预定义任何动画。所以我必须构建一个具有更新值的字符串并将其分配给元素样式属性。

这是我的问题。

因此,如果我必须为一些用户驱动的转换设置动画,我必须执行相对繁重的字符串操作来更新必要的值并保留那些我不设置动画的值?有没有更简单的 API 可以用 javascript 来完成?

我想先了解一下,所以没有框架,请。

谢谢。

最佳答案

我看到了 Ilya 关于矩阵的评论,这可能是一件值得检查的好事。鉴于我在矩阵数学方面很吃力,基于字符串的解决方案正合我意。

我在大约半小时内将其组合在一起,但它似乎运行良好。我假设您只会捕获鼠标移动并更新翻译值。我创建了 toObject 方法以防你想做一些更高级的动画。

我认为如果你要走这条路,你应该重新考虑不想使用框架。

(function() {
var setTransFunc, getTransFunc;

// make sure cross browser...
// I don't know if this is nescessary. Every browser I tried worked on the first options.
(function () {
var testElem = document.createElement('DIV');
if (testElem.style.transform !== undefined) {
setTransFunc = function (elem, str) {
elem.style.transform = str;
}
getTransFunc = function (elem) {
return elem.style.transform;
}
}
else if (testElem.style.webkitTransform !== undefined) {
setTransFunc = function (elem, str) {
elem.style.webkitTransform = str;
}
getTransFunc = function (elem) {
return elem.style.webkitTransform;
}
}
else if (testElem.style.msTransform !== undefined) {
setTransFunc = function (elem, str) {
elem.style.msTransform = str;
}
getTransFunc = function (elem) {
return elem.style.msTransform;
}
}
else {
throw ('unable to detect set/get methods for transform style.');
}
}).call();

// constructor
var _tranZ = function (elem) {
this.elem = (typeof elem == 'string') ? document.getElementById(elem) : elem;
};

(function () {
this.elem = null;
// sets transform style
this.set = function (str) {
setTransFunc(this.elem, str);
return this;
}
// gets string of transform style
this.get = function () {
return getTransFunc(this.elem);
}
// adds a trasnform
this.add = function (str) {
this.set(this.get() + ' ' + str);
return this;
}
// removes a transform
this.remove = function (name) {
var re = new RegExp(name + "\\([^)]*\\)", "gi");
console.log(re);
this.set(this.get().replace(re, ""));
return this;
}
// represent transforms as object. Might be easier later on to animate with this.
this.getTransformObject = function () {
var str = this.get(),
re = /(\w+)\s*\(([^)]*)\)/g,
match, obj = {};

while (match = re.exec(str)) {
obj[match[1]] = {
parameters: match[2].split(/\s*,\s*/)
}
}

return obj;
}
}).call(_tranZ.prototype);

// add a window module
window.tranZ = function (elem) {
return new _tranZ(elem);
};
})();

jsFiddle

关于javascript - 使用 JavaScript 动画化 css 转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17644322/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com