老师你好!

来源:4-2 CSS动画-命名约定以及测试脚本

weixin_慕粉6116347

2020-03-02 20:35:08

window.onload = function(){


    var screenAnimateElements = {


        '.screen_1': [

            '.screen_1_text',

            '.screen_1_phone',

            '.screen_1_shadow',

        ],

        '.screen_2':[

            '.screen_2_head',

        ],

        为什么我在这里加了.screen_2而第一屏第二屏点击都没反应了


    };


    function setScreenAnimate(screenCls){

        var screen = document.querySelector(screenCls);//获取当前屏的元素

        

        var animateElements = screenAnimateElements[screenCls];//需要设置动画的元素


        var isSetAnimateClass = false;//是否有初始化子动画元素的样式


        var isAnimateDone = false;//当前屏幕所有子元素是done吗?


        screen.onclick = function(){

            

            //初始化动画,增加init

            if(isSetAnimateClass === false){

                //遍历所有动画元素

                for(var i = 0; i < animateElements.length; i++){

                    //获取当前动画元素的classNmae

                    var element = document.querySelector(animateElements[i]);

                    var baseCls = element.getAttribute('class');

                    //设置当前动画元素的classNmae,增加'_animate_init'

                    element.setAttribute('class',baseCls + ' ' + animateElements[i].substr(1) + '_animate_init' );

                }

                //当前动画元素样式已增加init,所以isSetAnimateClass = true;

                isSetAnimateClass = true;

                return;

            }

            //切换所有 animateElements  的   init → done

            if(isAnimateDone === false){

                for(var i = 0; i < animateElements.length; i++){

                    var element = document.querySelector(animateElements[i]);

                    var baseCls = element.getAttribute('class');

                    //设置当前动画元素的classNmae,把'_animate_init'替换成'_animate_done'

                    element.setAttribute('class',baseCls.replace('_animate_init','_animate_done'));

                }

                //当前动画元素样式已替换成done,所以isSetAnimateClass = true;

                isAnimateDone = true;

                return;

            }

            //切换所有 animateElements  的   done → init

            if(isAnimateDone === true){

                for(var i = 0; i < animateElements.length; i++){

                    var element = document.querySelector(animateElements[i]);

                    var baseCls = element.getAttribute('class');

                    element.setAttribute('class',baseCls.replace('_animate_done','_animate_init'));

                }

                isAnimateDone = false;

                return;

            }

        }

    }

    for(k in screenAnimateElements);

    setScreenAnimate(k);


}


写回答

1回答

好帮手慕粉

2020-03-03

同学你好,关于同学的问题回答如下:

1、在设置for循环时写错了:

http://img.mukewang.com/climg/5e5dbf4209d5ac7904540139.jpg

2、由于同学没有给别的代码,老师就用的是课程中的源码,同学设置的类名跟课程中的不一致,老师这里修改为了课程中的类名:

http://img.mukewang.com/climg/5e5dbf9f091b3dfd05080415.jpg

之后测试同学的代码是正常的:

http://img.mukewang.com/climg/5e5dbfc709f0c1c209130209.jpg

同学点第二下就会出来动画。

如果我的回答帮助了你,欢迎采纳,祝学习愉快~

0

0 学习 · 40143 问题

查看课程