javascript - 过渡结束事件未触发

标签 javascript css events css-transitions transition

我正在编写一个 Polymer Web 组件,我想为其中的一个元素设置动画。对于这样的事情,我做了以下功能:

_animateRipple: function(x, y, color, amplitude) {
    var ripple = this.$.ripple;

    // Transition end listener
    ripple.addEventListener(this._whichTransitionEvent, transitionEndListener);

    // Ripple ended
    var transitionEndListener = function() {
        console.log("RIPPLE ENDED");
        ripple.classList.remove("transition-on");
        ripple.removeEventListener(this._whichTransitionEvent, transitionEndListener);
    }

    // Initial styling
    ripple.style.top = y + "px";
    ripple.style.left = x + "px";
    ripple.style.height = ripple.style.width = "0";
    ripple.style.backgroundColor = color;

    // Trigger ripple
    setTimeout(function() {
        ripple.classList.add("transition-on");
        ripple.style.height = ripple.style.width = amplitude + "px";
        ripple.style.top = y - (amplitude / 2) + "px";
        ripple.style.left = x - (amplitude / 2) + "px";
    }, 20);
}

this._whichTransitionEvent 只是一个具有当前平台正确事件名称的变量,它工作正常,这不是问题。

显然 .transition-on CSS 类添加了过渡并且它工作正常。

我希望 transitionEndListener 在过渡结束时触发(以便“RIPPLE ENDED”显示在控制台中),但它没有触发。

有什么想法吗?我已经尝试了很多东西...

最佳答案

问题是添加时监听器变量未定义,所以解决方法是在附加事件监听器之前声明它。

_animateRipple: function(x, y, color, amplitude) {
    var ripple = this.$.ripple;

    // Ripple ended
    var transitionEndListener = function() {
        console.log("RIPPLE ENDED");
        ripple.classList.remove("transition-on");
        ripple.removeEventListener(this._whichTransitionEvent, transitionEndListener);
    }

    // Transition end listener
    ripple.addEventListener(this._whichTransitionEvent, transitionEndListener);

    // Initial styling
    ripple.style.top = y + "px";
    ripple.style.left = x + "px";
    ripple.style.height = ripple.style.width = "0";
    ripple.style.backgroundColor = color;

    // Trigger ripple
    setTimeout(function() {
        ripple.classList.add("transition-on");
        ripple.style.height = ripple.style.width = amplitude + "px";
        ripple.style.top = y - (amplitude / 2) + "px";
        ripple.style.left = x - (amplitude / 2) + "px";
    }, 20);
}

关于javascript - 过渡结束事件未触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35148996/

相关文章:

当用户输入达到一定大小时,Javascript cookie不会保存

javascript - 如何在路径不明确的子文件夹中设置 React Router

javascript - 是否可以在 Javascript 中创建带有前缀的 XML 节点?

javascript - 切换后菜单消失

events - Node.js 事件发射器绑定(bind)到多个实例

c# - 连接事件处理器

javascript - 使用 ngIf 时无法发送输入数据

jquery - 短页时,粘性 header 会导致页 "jumps"

html - 3 个右对齐图像之间的间距仅在 Chrome 中看起来很奇怪

multithreading - 在阻塞主线程中使用 TEvent 和 MsgWaitForMultipleObjects