老师你好!
来源: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回答
同学你好,关于同学的问题回答如下:
1、在设置for循环时写错了:
2、由于同学没有给别的代码,老师就用的是课程中的源码,同学设置的类名跟课程中的不一致,老师这里修改为了课程中的类名:
之后测试同学的代码是正常的:
同学点第二下就会出来动画。
如果我的回答帮助了你,欢迎采纳,祝学习愉快~
相似问题