当前位置: 首页 > 知识库问答 >
问题:

检查元素是否有jQuery附加的动画名称?

易弘阔
2023-03-14

我想做这样的东西。

CSS库animate.CSS

@keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInUp {
  -webkit-animation-name: fadeInUp;
  animation-name: fadeInUp;
}
.animate__animated {
  animation-duration: 1s;
  animation-fill-mode: both;
}

HTML

<div class="animatedScroll animate__animated animate__fadeInUp" style="animation-delay: 0.3s;"><p>111</p></div>
<div class="animatedScroll"><p>222</p></div>

jQuery

$(function(){
    var element = $('.animatedScroll');
    $.each(element, function(i){
        let ele = $(this);
        var hasAnimation = false;
        var name = '';

        $(this).on('animationstart', function(e){
            // If the element has an animation and it's start running
            hasAnimation = true;
            name = e.originalEvent.animationName;
        });

        if ( hasAnimation === true ) {
            console.log('animation name is : ' + name);
        }
        else {
            console.log('no animation');
        }
    });
})

我希望控制台日志是动画名称是:fadeinupno animation

但结果是两个元素没有动画

据我所知,这是因为事件animationstart启动得晚了。

有没有其他方法可以达到同样的目的? 这可以用延迟对象来解决吗?

共有1个答案

林弘文
2023-03-14

我稍微整理了一下ypur代码。 在定义“AnimationStart”事件的操作之后,动画的console.log()立即执行。 那是在实际动画开始之前的很长时间。 所以结果总是:“没有动画”。 按照@Ikik的建议,我现在引入了一个“报告功能”,它为您提供关于系统当前状态的报告。 我在动画之前和之后分别触发一次报告(在事件函数内部)。

我更改的另一件事是,我通过使用DOM元素的data属性将动画信息直接与DOM元素关联。 这些属性可以通过.dataset属性从JavaScript访问。

null

var as=$('.animatedScroll');
as.each(function(i,ele){
  ele.hasAnimation=false;
  ele.name='';
  $(ele).on('animationstart', function(e){
    // If the element has an animation and it's start running
    ele.dataset.hasAnimation=true;
    ele.dataset.name = e.originalEvent.animationName;
    animationReport(as); // report after animation
  });
});

animationReport(as); // report before animation
  
function animationReport(sel){ // reports the most recent animation for each
  sel.each(function(i,ele){    // DOM element found in the given jQuery object sel
    console.log(ele.textContent+' has '+(ele.dataset.name||'no animation'))
  })
}
$('button').click(function(){animationReport(as)});
@keyframes fadeInUp {
  from {
    opacity: 0;
    -webkit-transform: translate3d(0, 100%, 0);
    transform: translate3d(0, 100%, 0);
  }

  to {
    opacity: 1;
    -webkit-transform: translate3d(0, 0, 0);
    transform: translate3d(0, 0, 0);
  }
}
.animate__fadeInUp {
  -webkit-animation-name: fadeInUp;
  animation-name: fadeInUp;
}
.animate__animated {
  animation-duration: 1s;
  animation-fill-mode: both;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class="animatedScroll animate__animated animate__fadeInUp" style="animation-delay: 0.3s;"><p>111</p></div>
<div class="animatedScroll"><p>222</p></div>
<button> report again </button>
 类似资料:
  • 问题内容: 有什么方法可以查看DOM元素的事件附加了哪些函数/代码?使用Firebug或任何其他工具。 问题答案: 使用传统或HTML附加的事件处理程序可以从脚本或调试器中的属性中轻松检索。 使用DOM Level 2事件方法和IE 附加的事件处理程序目前根本无法从脚本中检索。DOM Level3曾经提出要获得所有侦听器,但是目前尚不清楚这是否会符合最终规范。今天,任何浏览器都没有实现。 作为浏览

  • 问题内容: 如果该元素是通过方法创建的,如何检查该元素是否存在? 对我不起作用。 问题答案: 对我不起作用。 您需要在元素ID之前添加: 使用香草JavaScript,不需要例如hash(),但是使用jQuery时,确实需要像基于CSS一样将哈希放入目标元素。

  • null null 我想做的是,当我点击任何按钮时,它检查是否有任何其他按钮具有类“ButtonActive”,如果任何其他按钮具有这个类,它就从另一个按钮中移除这个类,并将它添加到我点击的按钮中。因此它应该始终是一个具有“ButtonActive”类的按钮。

  • 问题内容: 有没有办法断言某个元素(例如输入或链接)具有键盘焦点?我在Selenium中使用Codeception。在http://codeception.com/docs/modules/WebDriver上找不到任何内容 问题答案: 一个可靠的消息来源告诉我这可行: 测试愉快!

  • 问题内容: 检查div类“ media”是否在浏览器的可视视口内的函数,而不管窗口的滚动位置如何。 试图通过此功能使用此插件,但我不知道如何使它工作。 问题答案: 好吧,您如何尝试使其工作?根据该插件的文档,返回一个布尔值,指示该元素是否可见。因此,您可以像这样使用它:

  • 问题内容: 是否有可能切换元素的可见性,使用功能,或? 你会如何测试一个元素是否还是? 问题答案: 由于问题涉及单个元素,因此此代码可能更合适: 与twernt的建议相同,但适用于单个元素。它与jQueryFAQ中推荐的算法匹配 我们使用jQueryis()与另一个元素,选择器或任何jQuery对象一起检查选定的元素。此方法遍历DOM元素以找到匹配项,该匹配项满足传递的参数。如果存在匹配项,则返回

  • 问题内容: 我需要一个正则表达式或PHP中的函数来验证字符串是否是一个很好的XML元素名称。 表格w3schools: XML元素必须遵循以下命名规则: 名称可以包含字母,数字和其他字符 名称不能以数字或标点符号开头 名称不能以字母xml(或XML或Xml等)开头 名称不能包含空格 我可以编写一个基本的正则表达式来检查规则1,2和4,但是它不能解决所有允许的标点符号,也不能解决第三条规则 友善更新

  • 问题内容: 我试图仅使用jQuery在HTML元素为空的情况下调用函数。 像这样: 问题答案: 编辑: 正如某些人指出的那样,浏览器对空元素的解释可能会有所不同。如果您想忽略不可见的元素(例如空格和换行符)并使实现更加一致,则可以创建一个函数(或仅使用其中的代码)。 您也可以将其放入jQuery插件,但是您知道了。