在流星中,当 css3 转换结束时应该触发以下事件处理程序:
Template.flipper.events({
"transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd": function (event) {
console.log(this, event);
}
});
但是,它似乎不接受多种事件类型。
但是,以下在 Google Chrome 上运行良好:
Template.flipper.events({
"webkitTransitionEnd": function (event) {
console.log(event);
}
});
我可以按如下方式分别分配事件:
function transitionEnd(event) {
console.log(event);
}
Template.flipper.events({
transitionend: transitionEnd,
webkitTransitionEnd: transitionEnd,
oTransitionEnd: transitionEnd,
MSTransitionEnd: transitionEnd
});
但是现在,在某些transitionend
不带供应商前缀的浏览器版本上,该事件将触发两次。
我想找出支持哪种偶数类型,以便我可以执行以下操作:
var flipperEvents = {};
flipperEvents[supportedEvents("transitionend webkitTransitionEnd oTransitionEnd MSTransitionEnd")] = function (event) {
console.log(event);
});
Template.flipper.events(flipperEvents);
现在我将如何实现将为更现代的浏览器和供应商前缀版本supportedEvents
返回的函数?"transitionend"
我宁愿不使用浏览器类型检测来评估要使用的前缀。
是不是有什么地方可以查看支持的偶数类型?
我知道它可以在 jQuery 中轻松完成,但我试图避免使用 jQuery。
更新
我尝试使用此处找到的方法:
var transitions = {
'MozTransition': 'transitionend',
'WebkitTransition': 'webkitTransitionEnd',
'transition': 'transitionEnd',
'MSTransition': 'msTransitionEnd',
'OTransition': 'oTransitionEnd'
};
Template.flipper.rendered = function () {
var flipper = this.find(".flipper"),
eventMap = {},
eventType;
for (type in transitions) {
if (type in flipper.style) {
eventType = transitions[type];
break;
}
}
if (eventType) {
eventMap[eventType] = function (event) {
console.log(event);
};
console.log(eventMap);
Template.flipper.events(eventMap);
}
transitions = {};
};
但这也行不通。我认为这是因为 Meteor 在渲染模板后不允许事件映射。