`

jQuery鼠标滚轴

阅读更多

今天做一特效,挺简单的效果:

默认情况下,左侧菜单全部显示(很多个菜单不允许出现滚动条)

第一:每页显示个数根据根据窗口的高度来自动计算

第二:上面的标记栏(类似于小图标)根据菜单的个数自动计算个数(菜单总数/每页显示个数)

第三:点击“标记”时,自动切换到指定的页面

第四:添加鼠标滚轴事件,向上滚依次向下翻一页,向下滚一次则向上翻一页

(鼠标滚轴用的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鼠标悬停图片震动特效.zip

    《jQuery鼠标悬停图片震动特效》 在网页设计中,动态效果往往能吸引用户的注意力,提升用户体验。"jQuery鼠标悬停图片震动特效"就是这样一种巧妙的技术应用,它结合了CSS3的圆角样式和jQuery库,实现了当鼠标悬停在...

    jquery鼠标滑过图片显示个人具体信息

    jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息 jquery鼠标滑过图片显示个人具体信息

    jQuery鼠标经过星星显示特效.rar

    jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过星星显示特效.rar jQuery鼠标经过...

    jquery鼠标悬停放大图片

    "jQuery鼠标悬停放大图片"是一个常见的功能,它可以使用户在鼠标指针悬停在图片上时看到放大的图像细节,从而增强视觉效果和用户对图片内容的理解。这个例子中,我们将深入探讨如何使用jQuery库实现这一功能,并涉及...

    jquery实现鼠标移动出现提示信息

    jQuery 实现鼠标移动出现提示信息 jQuery 是一个流行的 JavaScript 库,广泛应用于 Web 开发中。今天,我们将讨论如何使用 jQuery 实现鼠标移动出现提示信息的功能。 标题解析 标题“jQuery 实现鼠标移动出现提示...

    jquery 鼠标移入显示悬浮框

    在网页设计中,jQuery 是一个广泛使用的 JavaScript 库,它极大地简化了JavaScript代码,使得诸如鼠标事件处理、动画效果和DOM操作变得更加便捷。本主题聚焦于"jQuery 鼠标移入显示悬浮框",这是一个常见的交互设计...

    jquery鼠标悬停图片标题滑动

    "jquery鼠标悬停图片标题滑动"是一个常见的jQuery应用场景,主要用于提升用户体验,当用户将鼠标悬停在图片上时,图片的标题会以平滑的方式展示出来。这种效果可以增加网站的视觉吸引力,同时也能有效地呈现图片信息...

    jquery鼠标悬停滑动下拉导航菜单效果.zip

    "jQuery鼠标悬停滑动下拉导航菜单效果"是一个常见的网页交互设计技术,广泛应用于企业网站和商城网站,以提升用户体验。这个效果通过结合JavaScript库jQuery实现,使得当用户将鼠标悬停在菜单项上时,会滑动展示下...

    jquery鼠标滚轮事件支持插件

    在给定的“jquery鼠标滚轮事件支持插件”中,我们关注的是如何利用jQuery扩展来处理鼠标的滚轮事件。这个插件允许开发者监听和响应用户滚动鼠标的滚轮,从而在网页上实现更加动态和交互的功能。 标题中的“jquery...

    jquery鼠标事件的小例子

    这个"jquery鼠标事件的小例子"旨在帮助初学者更好地理解如何在jQuery中使用鼠标事件,同时结合CSS来实现交互效果。 首先,让我们深入了解一下jQuery中的鼠标事件。jQuery封装了许多原生JavaScript中的鼠标事件,...

    jquery鼠标滑过显示二级下拉菜单代码

    本教程将深入讲解如何使用jQuery来实现鼠标滑过显示二级下拉菜单的代码实现。 首先,我们需要了解HTML结构。一个基本的二级下拉菜单通常由`&lt;ul&gt;`元素构建,其中包含一级菜单项`&lt;li&gt;`,每个一级菜单项内嵌套另一个`...

    jQuery鼠标悬停遮罩阴影效果.zip

    《jQuery鼠标悬停遮罩阴影效果详解》 在网页设计中,交互性的增强往往能提升用户体验,其中一种常见的手法就是利用JavaScript库,如jQuery,来实现动态效果。本篇文章将详细解析“jQuery鼠标悬停遮罩阴影效果”,...

    jquery鼠标悬停动画效果

    本教程将深入讲解如何使用jQuery来创建一个鼠标悬停时的动画效果,具体表现为当鼠标移到图片上方时,小图片会缓缓向上移动并最终静止。 首先,我们需要在HTML文件中引入jQuery库。这可以通过在头部添加CDN链接或者...

    jquery鼠标悬停背景渐变按钮

    【jQuery鼠标悬停背景渐变按钮】是一种网页交互设计中的特效技术,主要应用于网页上的按钮元素,以增强用户的视觉体验和交互感受。这种特效通过jQuery库实现,jQuery是JavaScript的一个强大库,它简化了HTML文档遍历...

    jQuery鼠标右键点击菜单代码.zip

    总结一下,"jQuery鼠标右键点击菜单代码.zip" 包含的可能是一个利用jQuery实现的自定义右键菜单功能。它通过监听`contextmenu`事件,阻止默认菜单,然后在鼠标点击位置显示一个可定制的菜单。这个例子展示了jQuery在...

    jquery鼠标滑动按钮图片切换.zip

    jquery鼠标滑动按钮图片切换是一款网站常用的简单图片切换特效,带索引按钮,鼠标滑过自动切换。

    jQuery鼠标悬停手风琴滑动切换特效

    在本文中,我们将深入探讨jQuery实现的鼠标悬停手风琴滑动切换特效,这是一个常见的前端交互设计,常用于导航菜单、内容展示等场景。这种特效可以为网站增添动态感,提升用户体验。让我们一起深入了解其背后的原理和...

    jquery鼠标滑过显示放大图片

    在这个场景中,jQuery将帮助我们监听鼠标的移动事件,并处理图片放大显示的逻辑。 接下来,我们要创建HTML结构,通常包括一个或多个图片元素。每个图片元素需要有原始尺寸的图片URL和放大后图片的URL(如果不同),...

    jquery鼠标悬停 图片预览功能的效果下载

    在本文中,我们将深入探讨如何使用jQuery库来实现一个鼠标悬停时的图片预览功能。这个功能在网站设计中非常常见,它为用户提供了一种便捷的方式来预览图像,而无需点击进入新页面或者加载全尺寸图片。我们将讨论实现...

Global site tag (gtag.js) - Google Analytics