以下是 jQuery带动画效果竖直菜单切换代码 的示例演示效果:
部分效果截图:
HTML代码(index.html):
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="Cache-Control" content="no-cache" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0" />
<meta name="format-detection" content="telephone=no" />
<title>jQuery带动画效果竖直菜单切换代码</title>
<link rel="stylesheet" href="css/demo-menu-if.css">
<script src="js/zepto.min.js"></script>
</head>
<!--该版蓝色边框为一个-->
<body style="background-color:#f7f7f7">
<section class="ZMenu-left-container">
<div class="ZMenu-left">
<div class="ZMenu-left-label" id="testlabel" style="top: 16px;"></div>
<ul class="ZMenu-left-nav">
<li class="ZMenu-left-nav-item active" data-number="1">
<a class="ZMenu-left-nav-a" href="#">
<img class="item-icon" src="image/iconfont-iconfontfavoriteoutline.png" width="25px" height="25px">
<span>我的订单</span>
</a>
</li>
<li class="ZMenu-left-nav-item" data-number="2">
<a class="ZMenu-left-nav-a item up" id="title" href="#">
<img class="item-icon" src="image/iconfont-iconfontimage.png" width="25px" height="25px">
<span>我的订单</span>
</a>
<ul class="child-item-nav" style="display:none">
<li class="ZMenu-left-nav-item">
<a class="ZMenu-left-nav-a 1" href="#">我的订单</a>
</li>
</ul>
</li>
<li class="ZMenu-left-nav-item">
<a class="ZMenu-left-nav-a" href="#">
<img class="item-icon" src="image/iconfont-iconfontlistul.png" width="25px" height="25px">
<span>我的订单</span>
</a>
</li>
<li class="ZMenu-left-nav-item">
<a class="ZMenu-left-nav-a title up" id="title" href="#">
<img class="item-icon" src="image/iconfont-iconfontplace.png" width="25px" height="25px">
<span>我的订单</span>
</a>
</li>
</ul>
</div>
</section>
<script type="text/javascript">
</script>
<script src="js/ZMenu.js"></script>
</body>
</html>
JS代码(ZMenu.js):
/** * * @authors leomYili * @date 2016-01-05 11:29:15 * @version $Id$ */
(function(){
function alphaPlay(obj,method){
var n = (method == "show") ? 0:100,ie = (window.ActiveXObject) ? true:false;
var time = setInterval(function(){
if (method == "show"){
if (n < 100){
n += 10;
if (ie){
obj.style.cssText = "filter:alpha(opacity=" + n + ")";
}
else{
(n == 100) ? obj.style.opacity = 1:obj.style.opacity = "0." + n;
}
}
else{
clearTimeout(time);
obj.style.display = "block";
}
}
else{
if (n > 0){
n -= 10;
if (ie){
obj.style.cssText = "filter:alpha(opacity=" + n + ")";
}
else{
obj.style.opacity = "0." + n;
}
}
else{
clearTimeout(time);
obj.style.display = "none";
}
}
}
,30);
}
function bind(elem,ev,callback){
if (document.all){
elem.attachEvent("on" + ev,callback);
}
else{
elem.addEventListener(ev,callback,false);
}
}
function unbind(elem,ev,callback){
if (typeof(callback) == "function"){
if (document.all){
elem.detachEvent("on" + ev,callback);
}
else{
elem.removeEventListener(ev,callback,false);
}
}
else{
if (document.all){
elem.detachEvent("on" + ev);
}
else{
elem.removeEventListener(ev,false);
}
}
}
function hover(elem,overCallback,outCallback){
//瀹炵幇hover浜嬩欢 var isHover = false;
//鍒ゆ柇鏄惁鎮诞鍦ㄤ笂鏂? var preOvTime = new Date().getTime();
//涓婃鎮诞鏃堕棿 function over(e){
var curOvTime = new Date().getTime();
isHover = true;
//澶勪簬over鐘舵€? if (curOvTime - preOvTime > 10){
//鏃堕棿闂撮殧瓒呰繃10姣锛岃涓洪紶鏍囧畬鎴愪簡mouseout浜嬩欢 overCallback(e,elem);
}
preOvTime = curOvTime;
}
function out(e){
var curOvTime = new Date().getTime();
preOvTime = curOvTime;
isHover = false;
setTimeout(function(){
if (!isHover){
outCallback(e,elem);
}
}
,10);
}
bind(elem,"mouseover",over);
bind(elem,"mouseout",out);
}
;
function getOffset(Node,offset){
if (!offset){
offset ={
}
;
offset.top = 0;
offset.left = 0;
}
if (Node == document.body){
//褰撹鑺傜偣涓篵ody鑺傜偣鏃讹紝缁撴潫閫掑綊 return offset;
}
offset.top += Node.offsetTop;
offset.left += Node.offsetLeft;
return getOffset(Node.parentNode,offset);
//鍚戜笂绱姞offset閲岀殑鍊?}
var el = $('.ZMenu-left-nav-a.item');
el.click(function(){
if ($(this).hasClass('up')){
$(this).removeClass('up');
$(this).addClass('down');
var objc = $(this).next().get(0);
alphaPlay(objc,"show");
}
else if ($(this).hasClass('down')){
$(this).removeClass('down');
$(this).addClass('up');
var objc = $(this).next().get(0);
alphaPlay(objc,"hiden");
}
}
);
$(".ZMenu-left-nav-a").each(function(index,element){
hover(element,function(e,elem){
/*jquery鎴杬epto鍙娇鐢ㄨ鏂规硶 *var x=$(element).offset().top-8;
console.log(x);
*/
var cc=getOffset(elem).top-8;
console.log(cc);
$("#testlabel").css({
top:cc + "px"}
)}
,function(e,elem){
}
);
}
);
hover($(".ZMenu-left").get(0),function(){
}
,function(e,elem){
$("#testlabel").css({
top:"16px"}
)}
);
}
)();
CSS代码(demo-menu-if.css):
@charset "UTF-8";/** * * @authors leomYili * @date 2016-01-07 10:39:01 * @version $Id$ */
.ZMenu-left-container{position:absolute;width:224px;box-shadow:1px 1px 2px rgba(0,0,0,.15);background:#fff;position:absolute;left:42%;margin-top:40px}
.ZMenu-left{position:relative;z-index:0;padding:16px 0px;}
.ZMenu-left .ZMenu-left-nav{margin:0px 0px 0px 2px;position:relative;padding:0px;width:222px;overflow-x:hidden;/*瓒呰繃浼氭秷澶?/}
.child-item-nav{margin:0px 0px 0px 0px;padding:0px;width:222px;position:relative;overflow-x:hidden;/*瓒呰繃浼氭秷澶?/}
.ZMenu-left .ZMenu-left-label{position:absolute;top:16px;left:0px;z-index:-1;width:218px;height:45px;border-left:6px solid #3794E3;background-color:#fafafa;transition:top 0.2s;}
.ZMenu-left-nav-item:first-child{border-top:none;}
.ZMenu-left-nav-item{position:relative;list-style:none;height:100%;margin-left:6px;border-top:1px solid #f7f7f7;}
.ZMenu-left-nav-a{position:relative;text-decoration:none;color:#212121;font-size:16px;line-height:45px;padding-left:64px;display:block;cursor:pointer;}
.item-icon{position:absolute;top:10px;left:25px;}
.item::after{content:"";display:inline-block;vertical-align:middle;width:6px;height:6px;border-left:2px solid #ccc;border-bottom:2px solid #ccc;display:inline-block;margin-left:5px;vertical-align:middle;position:relative;top:-4px;-webkit-transition:all 0.3s ease-in-out;}
.up::after{-webkit-transform:rotate(135deg);transform:rotate(135deg);top:1px;}
.down::after{webkit-transform:rotate(-45deg);transform:rotate(-45deg);top:-4px;}