页面加载后第一次点击显示欸有动画,后面点击显示隐藏才有动画

来源:2-9 用js实现其他显示隐藏效果

qq_勿忘初心_H

2020-02-28 11:15:50

<style type="text/css">
		.btn{
			width: 200px;
			height:40px;
			line-height: 40px;
			background-color: #ddd;
			text-align: center;
			margin-bottom: 20px;
			border: 1px solid #989898;
		}
		.box{
			width: 300px;
			height: 300px;
			background-color:red;
			display: none;
			overflow: hidden;
		}
		.transition{
			-o-transition: all 0.5s;
			-ms-transition: all 0.5s;
			-moz-transition: all 0.5s;
			-webkit-transition: all 0.5s;
			transition: all 0.5s;
		}
		.fadeOut{
			visibility: hidden !important;
			opacity: 0 !important;
		}
		.sildeUpDownCollapse{
			height:0 !important; /* 加important是因为前面设置了box的宽,会因为优先级的问题而无效*/
			padding-top: 0 !important;   /* 加padding是因为盒子的高度可能没设置,是由padding撑开的*/
			padding-bottom: 0 !important;

			/*但如果高度是由box中的子元素撑开的,而父元素又没有设置高度和padding的话,那就不会又上下卷起的过渡效果,因为不知道按什么高度来进行过渡动画,这就需要在js中手动计算下*/
		}
		.slideLeftRight{
			width: 0 !important;
			padding-left: 0 !important;
			padding-right: 0 !important;
		}
	</style>
slideLeftRight:{   
		init:function($elem){
			// 先要获取box本身的宽,padding值,这样才能在show和hide里面使用,就不用直接写具体的值了
			var styles={};
			styles['width']=$elem.css('width');
			styles['padding-left']=$elem.css('padding-left');
			styles['padding-right']=$elem.css('padding-right');
			$elem.data('style',styles); 

			$elem.removeClass('transition');
			init($elem,function(){
				$elem.css({  //如果元素是隐藏状态的话,先初始化设置他的样式
					'width':0,
					'padding-left':0,
					'padding-right':0
				});
			});
			
		},

		show:function($elem){
			var sty=$elem.data('style');						
				// 先将元素显示出来,然后再执行动画,如果是css3写法的话,要考虑同步异步的问题
				show($elem,function(){				
					$elem.show(); 
					$elem.stop().animate({
						'width':sty['width'],
						'padding-left':sty['padding-left'],
						'padding-right':sty['padding-right']
					},
				function(){   //动画执行完毕之后的操作
					$elem.data('status','shown').trigger('shown');
				});
				});
				
			},
			hide:function($elem){
			// 先执行动画,然后再将元素隐藏起来
			hide($elem,function(){
				$elem.stop().animate({
					'width':0,
					'padding-left':0,
					'padding-right':0
				},
				function(){   //动画执行完毕之后的操作
					$elem.hide();
					$elem.data('status','hidden').trigger('hidden');
				});
			});
			
		}
	},
var $box=$('.box');
		js.fadeSlideUpDown.init($box);
		$('#btn-show').on('click',function(e){
			js.fadeSlideUpDown.show($box);
			
		});
		$('#btn-hide').on('click',function(e){
			js.fadeSlideUpDown.hide($box);
		});


写回答

2回答

好帮手慕夭夭

2020-02-28

同学你好 ,老师这边测试,发现js报错 ,项目运行不了。应该是js上传的不对,请检查一下,把这个小例子使用的js全部粘贴上来哦。

祝学习愉快 !

0

好帮手慕夭夭

2020-02-28

同学你好,缺少html代码 ,请把全部代码粘贴到问答区,以便老师测试查找问题。

祝学习愉快 !

0
hq_勿忘初心_H
h <div class="btn" id="btn-show">显示</div> <div class="btn" id="btn-hide">隐藏</div> <div class="box" > <!-- <p>slideLeftRight</p> <p>slideLeftRight</p> <p>slideLeftRight</p> --> </div>
h020-02-28
共1条回复

0 学习 · 14456 问题

查看课程