当前位置: 首页 > 面试题库 >

Transitionend事件触发两次

马渊
2023-03-14
问题内容

我有以下代码,但我的问题是该transitionend事件被触发了两次。我不知道是什么原因造成的。我怀疑是由供应商前缀引起的,但并非如此。即使我只离开transitionendtransition它仍然会开火两次。

CSS

transition: 1s ease-out;

JS

document.addEventListener('click', function (e) {
    var submarine = document.querySelector('.submarine');
    var submarineX = e.clientX - submarine.offsetWidth / 2;
    var submarineY = e.clientY - submarine.offsetHeight / 2;

    submarine.style.left = submarineX + "px";
    submarine.style.top = submarineY + "px";
});

document.addEventListener('transitionend', function (event) {
    console.log(event.type + " " + new Date().getTime());
});






document.addEventListener('transitionend', function (event) {

    console.log(event.type + " " + new Date().getTime());

});



document.addEventListener('click', function (e) {

    var submarine = document.querySelector('.submarine');

    var submarineX = e.clientX - submarine.offsetWidth / 2;

    var submarineY = e.clientY - submarine.offsetHeight / 2;



    submarine.style.left = submarineX + "px";

    submarine.style.top = submarineY + "px";

});


.submarine {

    position: absolute;

    top: 0;

    left: 0;

    width: 20px;

    height: 20px;

    background-color: red;

    border-radius: 50%;

    transition: 1s ease-out;

}


<div class="submarine"></div>

问题答案:

transitionend对于您top和,每个已转换的属性都会触发left

您可以在访问与事件关联的属性event.propertyName

没有“ transition s end”事件,因此您可能需要一些技巧,例如transitionend仅过滤其中一个过渡属性的回调处理。例如:

function (event) {
    if (event.propertyName == 'top') {
        //put your code here
    }
});

ps。没有浏览器会触发该MSTransitionEnd事件。它是在MS文档中的某个时刻,但是在IE10beta版本发布之前的某个时间,它被标准transitionend事件所取代。



 类似资料:
  • 使用mui.trigger()方法可以动态触发特定DOM元素上的事件。 .trigger( element , event , data ) element Type: Element 触发事件的DOM元素 event Type: String 事件名字,例如:'tap'、'swipeleft' data Type: Object 需要传递给事件的业务参数 示例 自动触发按钮的点击事件: var

  • 我部署了一个用Python2编写的服务。7使用AWS Lambda,它是关于从一些页面提取数据并将结果发送到web应用程序。该服务由AWS CloudWatch事件触发(固定速率为5分钟)。 但是,我发现有时服务会一次触发两次。我得到这个是因为有两个日志流打印了相同的数据和结果,但具有不同的Request estID。并且数据库有重复的数据,这表明两者都成功工作。看起来服务几乎无缘无故地同时触发了

  • 我通过infinispan缓存添加了CacheEntryExpired侦听器的n实现。addListener()方法。 侦听器事件在条目过期时激发。问题是,每次事件触发两次。 我验证(使用调试器和cache.getListeners())缓存不包含我的同一个侦听器的两个实例。getListeners的结果是: 所以只有一个听众。侦听器实现接口: 一个实现看起来像: 但是从接口中删除@CacheEn

  • 问题内容: 我的整个项目都使用(Bluebird)Promises,但是有一个使用EventEmitter的特定库。 我想要实现以下目标: 我在Promises链中读了EventEmitter的答案。这给了我一种执行’connect’事件的回调的方法。这是我到目前为止所到之处 现在如何进一步链接“ eventB”? 问题答案: 我假设您想为每个事件做不同的事情。即使由的动作触发,您也可以将其视为另

  • 问题内容: 使用angular.js给出以下代码 此处的Plunkr:http://plnkr.co/edit/i4MAzs HTML: Javascript: 当您点击“ Value2”标签时,click事件将触发两次。仅当ng-click附加到标签时才会发生这种情况。将其附加到输入元素后,所有内容都会按预期工作。 有人可以解释发生了什么吗? 问题答案: 另外,我还编辑了您的plnkr以显示事件

  • 我正在使用Amazon Transcripbe服务,并试图让CloudWatch事件激发一个Lambda函数,该函数执行对我的API的POST请求。 下面是Lambda函数 我已经将CloudWatch事件配置为监听Amazon Transcripbe服务,特别是监听作业状态更改为或。 这是我认为我的应用程序工作的唯一方式,转录作业是通过亚马逊转录服务调用的,然后当它完成时,点击我的API来更新我