为什么我的按需加载中列表没有显示完全,为什么按需加载第一次加载时图片有动画而列表没有动画?
dropdown.html:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>下拉菜单</title>
<style type="text/css">
/*公共样式*/
body{
background-color: lightgrey;
}
.dropdown{
position: relative;
}
.dropdown-toggle{
position: relative;
z-index: 2;
}
.dropdown-arrow{
display: inline-block;
background-repeat: no-repeat;
vertical-align: middle;
}
.dropdown-layer{
overflow: hidden;
display: none;
z-index: 1;
position: absolute;
}
.dropdown-left{
left: 0;
right: auto;
}
.dropdown-right{
right: 0;
left: auto;
}
/*dropdown*/
.menu .dropdown-toggle{
height: 100%;
display: block;
padding: 0 26px 0 12px;
border-left: 1px solid #F3F5F7;
border-right: 1px solid #F3F5F7;
}
.menu .dropdown-arrow{
background-image: url();
}
.menu .dropdown-layer{
top: 100%;
background-color: #fff;
border: 1px solid #cdd0d4;
margin-top: -1px;
}
.menu-item{
display: block;
height: 30px;
line-height: 30px;
padding: 0 12px;
color: #4D555D;
white-space: nowrap;
}
.menu-item:hover{
background-color: #f3f5f7;
}
.menu-active .dropdown-toggle{
background-color: #fff;
border-color:#cdd0d4;
}
.ml50{
margin-left: 200px;
}
.fadeOut{
visibility: hidden;
opacity: 0;
}
.slidUpDownCollapse{
height: 0!important;
padding-top: 0!important;
padding-bottom: 0!important;
}
.slidLeftRightCollapse{
width: 0!important;
padding-left: 0!important;
padding-right: 0!important;
}
.transition{
transition: all 0.5s;
}
.btn{
margin-left: 50px;
}
.dropdown-loading{
width: 32px;
height: 32px;
background: url(img/QQ浏览器截图20181106215903.png) no-repeat;
margin: 20px;
}
</style>
<link rel="stylesheet" type="text/css" href="css/base.css"/>
</head>
<body>
<button id="btn_show" class="btn">点我显示</button>
<button id="btn_hide" class="btn">点我隐藏</button>
<div class="menu dropdown fl ml50" data-active = "menu" data-load='test/dropdown.json'>
<a class="dropdown-toggle">
我的慕淘<i class="dropdown-arrow"></i>
</a>
<ul class="dropdown-left dropdown-layer transition">
<li class="dropdown-loading"></li>
</ul>
<!--<li><a href="###" target="_blank" class="menu-item">已买到的宝贝</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>-->
</div>
<div class="menu dropdown fl ml50" data-active = "menu">
<a class="dropdown-toggle">
我的慕淘<i class="dropdown-arrow"></i>
</a>
<ul class="dropdown-left dropdown-layer transition">
<li><a href="###" target="_blank" class="menu-item">已买到的宝贝</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
<li><a href="###" target="_blank" class="menu-item">我的足迹</a></li>
</ul>
</div>
<script src="http://cdn.bootcss.com/jquery/1.12.4/jquery.js"></script>
<script type="text/javascript" src="js/transition.js"></script>
<script type="text/javascript" src="js/showHide.js"></script>
<script type="text/javascript" src="js/dropdown.js"></script>
<script type="text/javascript">
$('.dropdown').on('dropdown-show',function(e){
var $this=$(this),
dataLoad=$this.data('load');
if(!dataLoad) return;
if(!$this.data('loaded')){
var $layer=$this.find('.dropdown-layer');
// $layer.css('height','auto');
var html='';
$.getJSON($this.data('load'),function(data){
setTimeout(function(){
for(var i=0;i<data.length;i++){
html+=`<li>
<a href=${data[i].url} target="_blank" class="menu-item">${data[i].name}</a>
</li>`;
}
$layer.html(html);
$this.data('loaded',true);
},1000);
})
}
});
$('.dropdown')._dropdown({
css3:true,
animation:'slideUpDown',
event:'hover',
});
$('#btn_show').on('click',function(){
$('.dropdown')._dropdown('show');
});
$('#btn_hide').on('click',function(){
$('.dropdown')._dropdown('hide');
});
</script>
</body>
</html>base.css:
/*css reset*/
*{
margin: 0;
padding: 0;
}
ul li{
list-style: none;
}
a{
text-decoration: none;
color: black;
}
.fl{
float: left;
}
.fr{
float: right;
}transition.js:
(function(){
var transitionEndEventName={
transition:'transitionend',
MozTransition:'transitionend',
WebkitTransition:'webkitTransitionEnd',
OTransition:'oTransitionEnd otransitionend',
}
var transitionEnd='';
var isSupport=false;
for(var name in transitionEndEventName){
if(document.body.style[name]!==undefined){
transitionEnd=transitionEndEventName[name];
isSupport=true;
break;
}
}
window.mt=window.mt||{};
window.mt.transition={
end:transitionEnd,
isSupport:isSupport
}
})();showHide.js:
(function($){
var transition=window.mt.transition;
function init($elem,hiddenCallback){
if($elem.is(':hidden')){
$elem.data('status','hidden');
if(typeof hiddenCallback==="function") hiddenCallback();
}else{
$elem.data('status','shown');
}
}
function show($elem,callback){
if($elem.data('status')==='show'||$elem.data('status')==='shown') return;
$elem.data('status','show').trigger('show');
callback();
}
function hide($elem,callback){
if($elem.data('status')==='hide'||$elem.data('status')==='hidden') return;
$elem.data('status','hide').trigger('hide');
callback();
}
var silent={
init:init,
show:function($elem){
show($elem,function(){
$elem.show();
$elem.data('status','shown').trigger('shown');
})
},
hide:function($elem){
hide($elem,function(){
$elem.hide();
$elem.data('status','hidden').trigger('hidden');
})
}
}
var css3={
fade:{
init:function($elem){
css3._init($elem,'fadeOut');
},
show:function($elem){
css3._show($elem,'fadeOut');
},
hide:function($elem){
css3._hide($elem,'fadeOut');
}
},
slideUpDown:{
init:function($elem){
$elem.height($elem.height());
css3._init($elem,'slidUpDownCollapse');
},
show:function($elem){
css3._show($elem,'slidUpDownCollapse');
},
hide:function($elem){
css3._hide($elem,'slidUpDownCollapse');
}
},
slideLeftRight:{
init:function($elem){
$elem.width($elem.width());
css3._init($elem,'slidLeftRightCollapse');
},
show:function($elem){
css3._show($elem,'slidLeftRightCollapse');
},
hide:function($elem){
css3._hide($elem,'slidLeftRightCollapse');
}
},
fadeSlideUpDown:{
init:function($elem){
$elem.height($elem.height());
css3._init($elem,'fadeOut slidUpDownCollapse');
},
show:function($elem){
css3._show($elem,'fadeOut slidUpDownCollapse');
},
hide:function($elem){
css3._hide($elem,'fadeOut slidUpDownCollapse');
}
},
fadeSlideLeftRight:{
init:function($elem){
$elem.width($elem.width());
css3._init($elem,'fadeOut slidLeftRightCollapse');
},
show:function($elem){
css3._show($elem,'fadeOut slidLeftRightCollapse');
},
hide:function($elem){
css3._hide($elem,'fadeOut slidLeftRightCollapse');
}
},
}
css3._init=function($elem,className){
$elem.addClass('transition');
init($elem,function(){
$elem.addClass(className);
})
};
css3._show=function($elem,className){
show($elem,function(){
$elem.off(transition.end).one(transition.end,function(){
$elem.data('status','shown').trigger('shown');
})
$elem.show();
setTimeout(function(){
$elem.removeClass(className);
},10)
})
}
css3._hide=function($elem,className){
hide($elem,function(){
$elem.off(transition.end).one(transition.end,function(){
$elem.hide();
$elem.data('status','hidden').trigger('hidden');
})
$elem.addClass(className);
})
}
var js={
fade:{
init:function($elem){
js._inite($elem);
},
show:function($elem){
js._show($elem,'fadeIn');
},
hide:function($elem){
js._hide($elem,'fadeOut');
}
},
slideUpDown:{
init:function($elem){
js._inite($elem);
},
show:function($elem){
js._show($elem,'slideDown');
},
hide:function($elem){
js._hide($elem,'slideUp');
}
},
slideLeftRight:{
init:function($elem){
js._customInit($elem,{
'width':0,
'padding-left':0,
'padding-right':0
});
},
show:function($elem){
js._customShow($elem);
},
hide:function($elem){
js._customHide($elem,{
'width':0,
'padding-left':0,
'padding-right':0
});
}
},
fadeSlideUpDown:{
init:function($elem){
js._customInit($elem,{
'opacity':0,
'height':0,
'padding-top':0,
'padding-bottom':0
});
},
show:function($elem){
js._customShow($elem);
},
hide:function($elem){
js._customHide($elem,{
'opacity':0,
'height':0,
'padding-top':0,
'padding-bottom':0
});
}
},
fadeSlideLeftRight:{
init:function($elem){
js._customInit($elem,{
'opacity':0,
'width':0,
'padding-left':0,
'padding-right':0
});
},
show:function($elem){
js._customShow($elem);
},
hide:function($elem){
js._customHide($elem,{
'opacity':0,
'width':0,
'padding-left':0,
'padding-right':0
});
}
}
}
js._inite=function($elem,hiddenCallback){
$elem.removeClass('transition');
init($elem,hiddenCallback);
}
js._customInit=function($elem,options){
var styles={};
for(var p in options){
styles[p]=$elem.css(p);
}
$elem.data('styles',styles);
js._inite($elem,function(){
$elem.css(options);
})
}
js._customShow=function($elem){
show($elem,function(){
$elem.show();
$elem.stop().animate($elem.data('styles'),function(){
$elem.data('status','shown').trigger('shown');
})
})
}
js._show=function($elem,mode){
show($elem,function(){
$elem.stop()[mode](function(){
$elem.data('status','shown').trigger('shown');
});
})
}
js._hide=function($elem,mode){
hide($elem,function(){
$elem.stop()[mode](function(){
$elem.data('status','hidden').trigger('hidden');
});
})
}
js._customHide=function($elem,options){
hide($elem,function(){
$elem.stop().animate(options,function(){
$elem.hide();
$elem.data('status','hidden').trigger('hidden');
})
})
}
var defaults={
css3:false,
js:false,
animation:'fade',
active:'menu'
}
function showHide($elem,options){
var mode=null;
if(options.css3&&transition.isSupport){
mode=css3[options.animation]||css3[defaults.animation];
console.log('css3');
}else if(options.js){
mode=js[options.animation]||js[defaults.animation];
console.log('js');
}else{
mode=silent;
console.log('silent');
}
mode.init($elem);
return{
show:$.proxy(mode.show,this,$elem),
hide:$.proxy(mode.hide,this,$elem)
};
}
$.fn.extend({
showHide:function(option){
return this.each(function(){
var $this=$(this);
var _mode=$this.data('showHide');
var options=$.extend({},defaults,typeof option==='object'&& option);
// console.log(options);
if(!_mode){
$this.data('showHide',_mode=showHide($this,options));
}
if(typeof _mode[option]==='function'){
_mode[option]();
}
});
}
})
// window.mt=window.mt||{};
// window.mt.showHide=showHide;
})(jQuery)dropdown.js:
(function($){
function Dropdown($elem,options){
this.$elem=$elem;
this.options=options;
this.$layer=this.$elem.find('.dropdown-layer');
this.activeClass=options.active+'-active';
this._init();
}
Dropdown.DEFAULTS={
css3:false,
js:false,
animation:'fade',
event:'hover',
delay:0,
active:'dropdown'
}
Dropdown.prototype._init=function(){
var self=this;
this.$layer.showHide(this.options);
this.$layer.on("show shown hide hidden",function(e){
self.$elem.trigger('dropdown-'+e.type);
});
if(this.options.event==="click"){
setTimeout(function(){
})
this.$elem.click(function(e){
self.show();
e.stopPropagation();
});
$(document).click($.proxy(this.hide,this));
}else{
this.$elem.hover($.proxy(this.show,this),$.proxy(this.hide,this));
}
};
Dropdown.prototype.show=function(){
var self=this;
if(this.options.delay){
this.timer=setTimeout(function(){
_show();
},this.options.delay);
}else{
_show();
}
function _show(){
self.$elem.addClass(self.activeClass);
self.$layer.showHide('show');
}
}
Dropdown.prototype.hide=function(){
if(this.options.delay){
clearTimeout(this.timer);
}
this.$elem.removeClass(this.activeClass);
this.$layer.showHide('hide');
}
$.fn.extend({
_dropdown:function(option){
return this.each(function(){
var $this=$(this),
dropdown=$this.data('dropdown'),
options=$.extend({},Dropdown.DEFAULTS,$(this).data(),typeof option==='object'&& option);
// var dropdown=new Dropdown(this,options);
if(!dropdown){
$this.data('dropdown',dropdown=new Dropdown($this,options));
}
if(typeof dropdown[option]==='function'){
dropdown[option]();
}
})
}
})
})(jQuery);dropdown.jason:
[
{
"url":"###",
"name":"已买到的宝贝"
},
{
"url":"###",
"name":"我的足迹"
},
{
"url":"###",
"name":"我的优惠券"
}
]0
收起
正在回答 回答被采纳积分+1
2回答
组件化思想开发电商网页 18版
- 参与学习 人
- 提交作业 467 份
- 解答问题 4826 个
本路径带你通过系统学习HTML5、JavaScript、jQuery的进阶知识,不仅如此,还会学习如何利用组件化的思想来开发网页,知识点+案例,使得所学可以更好的得到实践。
了解课程



恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星