да, вам нужно взломать некоторые парсеры CSS в ядре mootools, чтобы позволить FX работать с ними.
проверьте этот забавный пример, который я сделал некоторое время назад для другой проблемы SO: http://jsfiddle.net/dimitar/ZwMUH/ - нажмите на любые 2 значка, чтобы поменять их местами, и они будут перемещаться по шкале.
или этот базовый класс лайтбокса, который я написал, который также использует его: http://jsfiddle.net/dimitar/6creP/
в самом начале, начните с модификации парсеров:
Element.Styles.MozTransform = "rotate(@deg) scale(@)";
Element.Styles.MsTransform = "rotate(@deg) scale(@)";
Element.Styles.OTransform = "rotate(@deg) scale(@)";
Element.Styles.WebkitTransform = "rotate(@deg) scale(@)";
Object.append(Fx.CSS.Parsers, {
TransformScale: {
parse: function(value) {
return ((value = value.match(/^scale\((([0-9]*\.)?[0-9]+)\)$/i))) ? parseFloat(value[1]) : false;
},
compute: function(from, to, delta) {
return Fx.compute(from, to, delta);
},
serve: function(value) {
return 'scale(' + value + ')';
}
}
});
также актуально, определить общедоступные и скриптовые версии всех стилей для разных браузеров:
transforms: {
computed: ['transformProperty', 'WebkitTransform', 'MozTransform', 'OTransform', 'msTransform'],
raw: ['transform', '-webkit-transform', '-moz-transform', '-o-transform', 'msTransform']
};
метод обнаружения, который будет выполнять циклическое преобразование, определенное выше, и возвращает первое, которое элемент поддерживает как окончательное свойство для работы в будущем, или непрозрачность как запасной вариант, если он недоступен:
var testEl = new Element("div"),
self = this;
this.scaleTransform = this.options.transforms.computed.some(function(el, index) {
var test = el in testEl.style;
if (test) {
self.prop = self.options.transforms.raw[index];
}
return test;
});
if (!this.prop) {
this.prop = "opacity";
}
затем this.prop
будет ссылаться на правильное свойство браузера, префикс поставщика или непрозрачность как запасной вариант для анимации движения / изменения, тогда как this.scaleTransform
будет логическим значением, указывающим на возможность масштабирования - вы можете проверить это, чтобы увидеть, поддерживается при создании объекта morph.
Сам объект будет выглядеть так:
var morphObj = {};
morphObj[this.prop] = ["scale(0)", "scale(1)"]; // call it dynamically
el.morph(morphObj);
доступны и другие решения, такие как этот плагин http://mootools.net/forge/p/fx_tween_css3, есть еще одно от Ихи Белы, о котором я знаю: https://github.com/tbela99/Fx.css
он также будет изначально доступен в mootools 2.0
веселиться.