今天做一特效,挺简单的效果:
默认情况下,左侧菜单全部显示(很多个菜单不允许出现滚动条)
第一:每页显示个数根据根据窗口的高度来自动计算
第二:上面的标记栏(类似于小图标)根据菜单的个数自动计算个数(菜单总数/每页显示个数)
第三:点击“标记”时,自动切换到指定的页面
第四:添加鼠标滚轴事件,向上滚依次向下翻一页,向下滚一次则向上翻一页
(鼠标滚轴用的Jquery的插件:jquery.mousewheel.js,具体可以参考:http://liuna718-163-com.iteye.com/blog/1796887)
1、页面布局:
<div class="leftnav_scroll" id="haveLoginedLeftContent"><!--整个左侧菜单DIV--> <ul id="menuall"> <li class="menuall"> <a href="javascript:void(0);" title="点击菜单显示所有子菜单">菜单</a><!--点击时用来加载二级菜单--> </li> <li class="lenavtop lenavtopgzrc"> <a href="javascript:void(0);" title="返回首页"></a><!--点击时用来刷新center的页面内容--> </li> </ul> <ul id="firstMenu"> <li class="menutab" id="menutab"> <!--小图标li--> <a href="javascript:void(0);" onclick="toNextMenu(this,1)" class="xz"></a> </li> <!--菜单--> <c:forEach items="${menuList }" var="menu"> <li class="lenavtop dingshi"> <a id="fun_${menu.menuId}" name="${menu.menuName }"></a> </li> </c:forEach> </ul> </div>
2、所用的JS:
<script type="text/javascript"> var tabMap = new Map(); $(function(){ //计算可以选取一级节点的数量 var liNum = $("#firstMenu").children("li:gt(0)").length;//获取除了第一个li其他li的个数,第一个li是小图标所在li if(liNum>0){//至少有一个 var leftH = $(".leftnav_scroll").height();//整个DIV的高度 var menuallH = parseInt($("#menuall").children("li").eq(0).height())+ parseInt($("#menuall").children("li").eq(1).height()); var menutabH = $("#menutab").height(); //剩下的li高度为: //alert(leftH+" "+menuallH+" "+menutabH); var restLiH = leftH-menuallH-menutabH; var liH = parseInt($("#firstMenu").children("li").eq(2).height());//获取第二个li的高度,来计算大概能容纳多少个li /* alert(liH); if(liH<67){ liH=67;//目前css中其高度为67px,IE中计算出来是67,在火狐中却是20 } */ var tabSize = Math.floor(restLiH/liH);//向下取整:每次能容纳几个 tabMap.put("tabSize",tabSize);//把每页能容纳的数量存到map里面避免其他地方需要用到时重复计算的问题 //总数除以每次容纳的数量,可以得到总共需要多少个提示点 var tabNum = Math.ceil(liNum/tabSize); //alert(tabNum); if(tabNum>1){ var tabStr=""; for(var i=0;i<tabNum-1;i++){//减去的一个是原本就已经存在的那个 //因为使用的小图标使用的顺序从1开始,且第一个本来就存在,所以需要加2 tabStr +="<a href='javascript:void(0);' onclick='toNextMenu(this,"+(i+2)+");'></a>"; } $("#menutab").append(tabStr);//追加到menutab后面 $("#firstMenu").children("li:gt("+tabSize+")").hide();//打开时只需要加载指定的个数就行,其他的隐藏 } } //为左边的菜单栏添加鼠标滚轴事件 $("#haveLoginedLeftContent").bind('mousewheel', function(event, delta, deltaX, deltaY){ //delta为1向上滚动 delta为-1向下滚动 //alert("delta="+delta+" deltaX="+deltaX+" deltaY="+deltaY); var $A = $("#menutab").children("a.xz");//获取当前选定状态下的a对象 if(delta<0){//说明向下滚动那么向下翻页 var $nextA = $A.next(); if(!isempty($nextA)){//说明对象存在 toNextMenu($nextA,$A.index()+2); } }else{//向上滚 var $nextA = $A.prev(); if(!isempty($nextA)){//说明对象存在 toNextMenu($nextA,$A.index()); } } }); }); //点击各个提示点时,切换一级菜单 function toNextMenu(obj,tabOrder){ var order =1; if(tabOrder!=null && tabOrder!=''){ order = tabOrder; } //样式变化 $(obj).addClass("xz").siblings().removeClass("xz"); order= parseInt(order); var tabSize=parseInt(tabMap.get("tabSize"));//每页显示个数 var start = parseInt((order*tabSize)-(tabSize-1));//计算第order页第一个显示的li的下标 var end = parseInt(order*tabSize);//最后一个下标 $("#firstMenu").children("li:lt("+start+")").hide();//下标小于start的li隐藏 $("#firstMenu").children("li").eq(0).show();//第一个li是tab,不能隐藏 $("#firstMenu").children("li:gt("+end+")").hide();//下标大于end的li也隐藏,这样在start和end之间的就显示出来啦 //alert(start+"\n"+end); $("#firstMenu").children("li:gt(0)").slice(start-1,end).show(); /*用循环依次比较,符合条件的显示,否则隐藏 $("#firstMenu").children("li:lt("+start+")").hide(); $("#firstMenu").children("li").eq(0).show();//第一个li是tab,不能隐藏 $("#firstMenu").children("li:gt("+end+")").hide(); for(var j=start;j<=end;j++){ $("#firstMenu").children("li").eq(j).show(); } */ } /** *验证js变量的值是否为空, * true-不存在 * false-存在 * */ function isempty(v){ switch (typeof v){ case 'undefined' : return true; case 'string' : if(jQuery.trim(v).length == 0) return true; break; case 'boolean' : if(!v) return true; break; case 'number' : if(0 === v) return true; break; case 'object' : if(null === v) return true; if(undefined !== v.length && v.length==0) return true; for(var k in v){return false;} return true; break; } return false; } </script>
3、注意点:
原本小图标的点击事件是添加在href中的,即:
<a href="javascript:toNextMenu(this,1);" class="xz"></a>
后来在使用的时候发现有问题:那个this所代表的当前对象根本传递不过去,如果不传过去操作起来又会比较麻烦,就改成了拥有同样效果的下列代码:
<a href="javascript:void(0);" onclick="toNextMenu(this,1)" class="xz"></a>
至于href的传对象问题,网上是说:
既然onclick定义的是一个函数,并且是调用元素的一个方法,this就代表该元素。
如果是写在 href="javascript:" 里的代码,他的作用域是全局的,所以写this,它不知道到底是那个元素。
参考:http://www.cnblogs.com/wwlearn/archive/2009/01/19/1378592.html
相关推荐
五种jQuery鼠标移动点击特效 雪花 气泡 蝙蝠 表情 星星 五种jQuery鼠标移动点击特效 雪花 气泡 蝙蝠 表情 星星 五种jQuery鼠标移动点击特效 雪花 气泡 蝙蝠 表情 星星 五种jQuery鼠标移动点击特效 雪花 气泡 蝙蝠 ...
《jQuery鼠标悬停图片震动特效》 在网页设计中,动态效果往往能吸引用户的注意力,提升用户体验。"jQuery鼠标悬停图片震动特效"就是这样一种巧妙的技术应用,它结合了CSS3的圆角样式和jQuery库,实现了当鼠标悬停在...
jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息
jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过...
"jQuery鼠标悬停放大图片"是一个常见的功能,它可以使用户在鼠标指针悬停在图片上时看到放大的图像细节,从而增强视觉效果和用户对图片内容的理解。这个例子中,我们将深入探讨如何使用jQuery库实现这一功能,并涉及...
jQuery 实现鼠标移动出现提示信息 jQuery 是一个流行的 JavaScript 库,广泛应用于 Web 开发中。今天,我们将讨论如何使用 jQuery 实现鼠标移动出现提示信息的功能。 标题解析 标题“jQuery 实现鼠标移动出现提示...
在网页设计中,jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了JavaScript代码,使得诸如鼠标事件处理、动画效果和DOM操作变得更加便捷。本主题聚焦于"jQuery 鼠标移入显示悬浮框",这是一个常见的交互设计...
"jquery鼠标悬停图片标题滑动"是一个常见的jQuery应用场景,主要用于提升用户体验,当用户将鼠标悬停在图片上时,图片的标题会以平滑的方式展示出来。这种效果可以增加网站的视觉吸引力,同时也能有效地呈现图片信息...
"jQuery鼠标悬停滑动下拉导航菜单效果"是一个常见的网页交互设计技术,广泛应用于企业网站和商城网站,以提升用户体验。这个效果通过结合JavaScript库jQuery实现,使得当用户将鼠标悬停在菜单项上时,会滑动展示下...
在给定的“jquery鼠标滚轮事件支持插件”中,我们关注的是如何利用jQuery扩展来处理鼠标的滚轮事件。这个插件允许开发者监听和响应用户滚动鼠标的滚轮,从而在网页上实现更加动态和交互的功能。 标题中的“jquery...
这个"jquery鼠标事件的小例子"旨在帮助初学者更好地理解如何在jQuery中使用鼠标事件,同时结合CSS来实现交互效果。 首先,让我们深入了解一下jQuery中的鼠标事件。jQuery封装了许多原生JavaScript中的鼠标事件,...
本教程将深入讲解如何使用jQuery来实现鼠标滑过显示二级下拉菜单的代码实现。 首先,我们需要了解HTML结构。一个基本的二级下拉菜单通常由`<ul>`元素构建,其中包含一级菜单项`<li>`,每个一级菜单项内嵌套另一个`...
《jQuery鼠标悬停遮罩阴影效果详解》 在网页设计中,交互性的增强往往能提升用户体验,其中一种常见的手法就是利用JavaScript库,如jQuery,来实现动态效果。本篇文章将详细解析“jQuery鼠标悬停遮罩阴影效果”,...
本教程将深入讲解如何使用jQuery来创建一个鼠标悬停时的动画效果,具体表现为当鼠标移到图片上方时,小图片会缓缓向上移动并最终静止。 首先,我们需要在HTML文件中引入jQuery库。这可以通过在头部添加CDN链接或者...
【jQuery鼠标悬停背景渐变按钮】是一种网页交互设计中的特效技术,主要应用于网页上的按钮元素,以增强用户的视觉体验和交互感受。这种特效通过jQuery库实现,jQuery是JavaScript的一个强大库,它简化了HTML文档遍历...
总结一下,"jQuery鼠标右键点击菜单代码.zip" 包含的可能是一个利用jQuery实现的自定义右键菜单功能。它通过监听`contextmenu`事件,阻止默认菜单,然后在鼠标点击位置显示一个可定制的菜单。这个例子展示了jQuery在...
jquery鼠标滑动按钮图片切换是一款网站常用的简单图片切换特效,带索引按钮,鼠标滑过自动切换。
在本文中,我们将深入探讨jQuery实现的鼠标悬停手风琴滑动切换特效,这是一个常见的前端交互设计,常用于导航菜单、内容展示等场景。这种特效可以为网站增添动态感,提升用户体验。让我们一起深入了解其背后的原理和...
在这个场景中,jQuery将帮助我们监听鼠标的移动事件,并处理图片放大显示的逻辑。 接下来,我们要创建HTML结构,通常包括一个或多个图片元素。每个图片元素需要有原始尺寸的图片URL和放大后图片的URL(如果不同),...
在本文中,我们将深入探讨如何使用jQuery库来实现一个鼠标悬停时的图片预览功能。这个功能在网站设计中非常常见,它为用户提供了一种便捷的方式来预览图像,而无需点击进入新页面或者加载全尺寸图片。我们将讨论实现...