zoukankan      html  css  js  c++  java
  • 中断与停止CSS transition

    可能本来就是这样,处于阶段的CSS3就不该大规模应用,浏览器商只是用它炫耀CSS能做行为层的事儿。现在人们比对待IE的CSS滤镜宽容多了,因此这事情还是逐一被其他浏览器所接受。在CSS3提供的两上实现动画的方案中,transition与animation,animation在DOM中没有对应的API,而transition则在我们动画暂停时遇上滑铁卢了——在webkit与opera中,我们是无法用removeProperty去掉transition的效果,一经定义就永远持续下去。在firefox中,我们还可以用覆写的方式去掉它们。

    在开始演示之前,我给出取得CSS3 WebKitTransitionEvent事件名的方法:

    var getTransitionEndEventName = function(){
        var obj = {
            'WebKitTransitionEvent': 'webkitTransitionEnd',
            'TransitionEvent': 'transitionend',
            'OTransitionEvent': 'oTransitionEnd'
        }, ret ,e;
        for (var name in obj) {
            try {
                document.createEvent(name);
                ret =  obj[name];
                console.log(ret)
             
            } catch (ex) { }
        }
    
        getTransitionEndEventName = function(){
            return ret
        }
        return ret;
    }
    getTransitionEndEventName();
    

    由于无法在webkit与opera上清除transition,这事件就可能无数次触发,这可不是我们愿意看到的。因此我们每次在中断或停止动画必须就元素解除绑定。

    好了,下面进入正题。

    方案一:使用一个新节点做替身。我们可以用cloneNode(true)弄一个一模一样的节点插入到原节点的前面,然后隐藏原来,将transition设置在新节点上,当动画中断或停止时,把当前的样式覆盖到原节点上,让它显示出来,再移除新节点!

    但人们想在动画中进行对它进行操作呢?因为节点已不是原来的节点,因此维护成本非常高!

    方案2:无视transition的永久效果。因为在中断或停止时,我们把当前样式取出来再覆盖上去,也可以中止动画。

    但无视终归是逃避问题,不清除transition,以后每次对元素的CSS操作都会动画化(除了在FF中),因此也不可行。

    综上所述,CSS3对行为层的干涉至今还是不成熟的。作为一个成熟的框架不应该把它作为构建动画的手段。

  • 相关阅读:
    firefox配置
    安装gstreamer开发环境
    linux下批量替换文件内容(转)
    iptables详细教程:基础、架构、清空规则、追加规则、应用实例(转)
    iptables 使用
    如何用iptables实现NAT(转)
    Python 练习题
    Python unittest 参数化
    Python Logging模块
    Python 多进程
  • 原文地址:https://www.cnblogs.com/rubylouvre/p/2172539.html
Copyright © 2011-2022 走看看