前端编程提高之旅 jQuery常见特效.docx_第1页
前端编程提高之旅 jQuery常见特效.docx_第2页
前端编程提高之旅 jQuery常见特效.docx_第3页
前端编程提高之旅 jQuery常见特效.docx_第4页
前端编程提高之旅 jQuery常见特效.docx_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

前端编程提高之旅(二)-网站常见特效的jquery实现时间2014-08-09 23:11:11CSDN博客原文/yingyiledi/article/details/38460189最好的编程语言是逻辑,前端各种交互特效的实现多可以用jquery实现,特效可以纷飞,内在逻辑则基本不变。这一篇文章主要介绍jquery实现常见特效背后的逻辑。1.通过类名获取元素集合 首先来看一个js原生代码不支持的方法,通过类来获取元素集合。document.getElementsByClassName=function(classname) var retnode = ; var myclass = new RegExp(b+classname+b);/匹配类名 var elem = this.getElementsByTagName(*);/得到所有元素 for (var j = 0; j elem.length; j+) var classes = elemj.className; if (myclass.test(classes) retnode.push(elemj); return retnode;/通过遍历整个文档元素类名,返回所有指定类名的数组 逻辑思路: 通过构造一个类名的正则表达式,选取所有标签,并通过正则表达式与所有标签类名属性进行匹配,从而返回一个类名数组,实现通过类名得到元素集合的目标。 实现这个方法的同时,也给在不使用jquery的情况下,选取特定序数的元素提供了便利。2.二级联动菜单的构造$(#select1).change( function() /侦测一级菜单的change事件 var id = $(#select1).val(); if(id = 1) /通过id判断二级菜单 $.get(index.php, null, function(data) /get方式传值 $(span).empty(); /清空标签 $(span).append(济南青岛 临沂);/填充对应的二级菜单 ); else $.get(index.php, null, function(data) /get方式传值 $(span).empty(); /清空标签 $(span).append(郑州安阳 洛阳);/填充对应的二级菜单 ); ); 逻辑思路: 根据需要设置联动菜单的元素值被改变的情况,通过ajax方法传空值给自身页面,追加相应的元素,在这里是二级菜单。这里用到了jquery两个方法:change方法和empty方法。 change方法在选定标签值改变时,会被触发执行。empty方法则是将标签中html内容清空。3.链接样式和链接内容的显示隐藏$(function() $(li).each(function(index) /遍历用户控制区域 $(this).mouseover(function() /获取当前用户选择区域 id = setTimeout(function() /使用时间事件函数实现缓动效果 更好的用户体验 $(li.tab).removeClass(tab); /移除默认的选项按钮的样式 $(this).addClass(tab); /给当前选项按钮添加样式 $(div.show).removeClass(show); /移除默认的显示区域的样式 $(#tab1 div:eq(+index+).addClass(show);/根据选中的index索引添加样式 ,300); ).mouseout(function() clearTimeout(id); /用户鼠标移除时同时移除时间事件 ); ); );/链接对应相应内容的隐藏和显示 逻辑思路: 这里首先用到$()在其中书写函数,这里详细介绍了jquery构造函数的适用范围。通过遍历每个导航链接,当鼠标移上对应元素,首先移除所有默认选项样式,在悬浮元素加上默认选中样式。并移除当前显示样式,设置默认选项对应内容样式为显示状态。 这里的亮点在于使用了一个显示默认样式的缓动效果,用户体验更细致。 4.“显示更多(more)”功能的实现$(function()var $hideObj = $(ul li:gt(5):not(:last);/选择index大于等于5的li元素,除去最后一个,隐藏掉$hideObj.hide();$(.showmore span).click(function()if(!$hideObj.is(:visible)/判断是否可见is方法$hideObj.show();$(.showmore span).css(background,url(./images/up.bmp) no-repeat 0 -10);/切换状态更换图片else$hideObj.hide();$(.showmore span).css(background,url(./images/down.bmp) no-repeat 0 0);/切换状态更换图片););/选择一部分隐藏掉,再将部分判断是否显示,显示或者隐藏 逻辑思路: 这里首先动用了选择器除去最后一个元素所有大于5的li元素选中。通过用户点击事件,判断是否显示或者隐藏,并联动修改被点击的图标。 亮点在选择器的掌控恰到好处,用jquery最基本的就要用熟选择器,这样会快速高效操作dom节点。这样也就不难理解css3为什么首要改革的就是选择器了,简化操作流程、正则化及语义化css选择器,使得前端工程师读和写代码更便捷。 5.文本域“剩余字数” $(document).ready(function() vartarea = $(#init);/ tarea.focus(function() $(#numtj).fadeIn(200); ).blur(function() $(#numtj).fadeOut(slow); )/文本域获得焦点和失去焦点剩余字数显示或消失,用到渐入渐出 $(#init).keyup(function() vartext=$(#init).val(); varcounter=text.length; $(#numtj var).text(110-counter); );/ 按下键盘则实时修改剩余字数 ); 逻辑思路: 逻辑非常简单,获得焦点剩余字数显示,失去焦点剩余字数消失。键盘按起计算还剩字数。 这里的亮点在于使用了fadeIn和fadeOut方法实现渐入渐出更加自然,体验更好。focus和blur事件也是针对有输入内容的元素常需处理的事件。keyup事件则与用户输入内容,实时交互有关系。6.鼠标移动到图片放大varShowImage =function() xOffset= 10; yOffset= 30; $(#imglist).find(img).hover(function(e)/给图片对象添加事件及触发函数 $().appendTo(body);/在body上添加图片对象 $(#imgshow) .css(top,(e.pageY - xOffset)+ px)/定位body显示图片的y坐标 鼠标位置加人为设置偏移量 .css(left, (e.pageX + yOffset) +px)/定位body显示图 .fadeIn(fast); ,function() $(#imgshow).remove(); ); $(#imglist).find(img).mousemove(function(e) $(#imgshow).css(top,(e.pageY-xOffset) + px) .css(left, (e.pageX + yOffset) +px); ); ;逻辑思路: 这段代码的逻辑非常具有普遍性,e代表鼠标事件,鼠标属性pageX和pageY代表鼠标的坐标位置。整体的思路即是通过鼠标触发悬浮事件,显示或者移除与鼠标位置有一个偏移的图片,并通过设置mousemove事件来实时移动放大图位置。 看了以上几个例子我们会发现,事件和选择器是整体交互效果核心。所以这里有必要再精通、再精通。 7.图片轮播vart =0; varn =0; varcount;/全局变量沟通函数和click事件内变量 $(document).ready(function() count=$(#bannerList a).length;/获取用户控制a标签的总数 $(#bannerList a:not(:first-child).hide();/除了第一个元素都隐藏 $(#banner li).click(function()/给存放图片的列表添加单击事件 vari =$(this).text() - 1;/获取Li元素内的值,即1,2,3,4 n =i;/i的值赋值给n if (i = count)/判断是否大于a标签的总数 return; var$a = $(#bannerLista).filter(:visible).fadeOut(500);/显示的都隐藏掉 $a.parent().children().eq(i).fadeIn(1000);/根据当前li元素的值显示图片 /$(#banner).css(background,);/显示按钮样式 $(this).toggleClass(show);/当前对象删除或者添加类show $(this).siblings().removeAttr(class);/当前对象删除类属性 ); /设置定时或消除定时 t =setInterval(showTime(), 3000);/每隔三秒执行一次方法 $(#banner).hover(function()/给按钮添加鼠标滑过事件 clearInterval(t),function()/鼠标滑过停止播放 t =setInterval(showTime(), 3000);/鼠标滑出继续播放 ); ) function showTime() if(n=(count-1) n=0; else n=+n; $(#banner li).eq(n).trigger(click);/代码触发click事件 逻辑思路: 这段图片轮播的代码,大体可以分为三个模块:初始化模块、单击事件模块、鼠标悬浮模块、自动触发模块。初始化模块意在初始化开始轮播图片序数,单击时间模块意在确定单击事件执行被单击对象显示其他对象隐藏操作,鼠标悬浮模块意在清除或者恢复自动触发模块,以便执行单击操作,自动触发模块用于模拟单击事件。 这段代码混乱之处在于设置的i和n都为全局变量,在函数和执行语句中游走。trigger这个事件竟然模拟了单击事件,鼠标悬浮hover用的恰到好处,不会造成与click事件的冲突。 8.选择城市插件jQuery.fn.selectCity = function(targetObj) var _self = this;/获取当前对象,使用此插件的选择器内对象 var targetObj = $(targetObj);/根据参数获取对象 this.click(function()/当前对象触发单击事件 var _top=$(this).offset().top + $(this).outerHeight(true);/获取对象相对顶部真实高度 var _left=$(this).offset().left;/获取对象相对左侧真是高度 targetObj.bgiframe();/调用插件的方法bgiframe() targetObj.show().css(position:absolute,top:_top+px ,left:_left+px);/显示定位 );/根据被选对象的位置,将隐藏的显示出来并设置隐藏的下方位置 targetObj.find(#selectItemClose).click(function() targetObj.hide();/用户单击关闭按钮隐藏选择区域 ); targetObj.find(#selectSub :checkbox).click(function() targetObj.find(:checkbox).attr(checked,false);/将所有的多选框设置为未被选中 $(this).attr(checked,true); _self.val($(this).val(); targetObj.hide();/设置点击选中,并传递给input对象值,隐藏选中框 ); $(document).click(function(event) if(event.target.id!=_self.selector.substring(1)/鼠标在页面单击时隐藏复选框对象 targetObj.hide(); ); targetObj.click(function(e) e.stopPropagation(); /阻止事件的传递 ); return this; 逻辑思路: 页面单击对象时,则设置需要显示的对象到被单击对象的下方。并设置关闭按钮。将所有多选框设置未被选中,以选中特定栏。当鼠标单击页面时,需要显示的对象消失。这里比较新颖的是当鼠标不点击显示区域和单击对象时的处理,才采用了一个target.id的判断达到效果。9.分页插件varpage_all = $(.page);/获取所有需要分页显示的区域,全局变量 varuser_nav = $(#page_nation);/用户分页操作区域,全局变量,函数内更改也会更改值 function createActionLinks()/动态生成分页操作区域 user_nav.append(上一页); for(vari=0;i$(.page).length;i+)/显示区域的范围内遍历 user_nav.append(+(i+1)+); user_nav.append(下一页); function changeAction(page,preBtn,nextBtn)/分页实现函数 $(.page:eq(+page+).css(display,block);/显示当前分页内容 $(.numlink:eq(+page+).addClass(current);/当前页按钮高亮显示 varpageSize = parseInt($(.page).length -1);/获取最大页数 if(page= 0)/显示在第一页时 preBtn.hide();/上一页按钮隐藏 nextBtn.show();/下一页按钮显示 else if(page=pageSize)/显示在最后一页时 preBtn.show();/上一页按钮隐藏 nextBtn.hide();/下一页按钮显示 else preBtn.show();/上一页按钮显示 nextBtn.show();/下一页按钮显示 function hideObj() page_all.css(display,none);/隐藏所有分页 $(.numlink).removeClass(current);/去除所有分页的样式 $(document).ready(function() $(.page:eq(0).css(display,block);/默认显示第一页 createActionLinks();/初始化创建用户操作区域 $(.numlink:eq(0).addClass(current);/给第一个按钮添加样式 varnextBtn= $(#next);/获取下一页按钮对象 varpreBtn = $(#prev);/获取上一页按钮对象 varlinkAction = $(.numlink);/获取超级链接对象集合 preBtn.hide();/默认显示第一页并隐藏上一页操作按钮 varpage =parseInt($(.numlink).index($(.current);/返回当前分页值,这一句话很关键 /三种点击动作 nextBtn.click(function()/给下一页按钮添加单击事件 hideObj();/隐藏全部分页部分 changeAction(page+1,preBtn,nextBtn);/函数每执行一次page的值减1 page =parseInt($(.numlink).index($(.current);/返回page的值 ); preBtn.click(function()/给上一页按钮添加单击事件 hideObj();/隐藏全部分页部分 changeAction(page-1,preBtn,nextBtn);/函数每执行一次page的值加1 page = parseInt($(.numlink).index($(.current);/返回page的值 ) linkAction.click(function()/给分页页码链接添加单击事件 varthat = $(this);/获取当前对象 hideObj();/隐藏全部分页部分 varindex =that.index() - 1;/获取当前下标值 changeAction(index,preBtn,nextBtn);/调用分页函数 page = parseInt($(.numlink).index($(.current);/返回page的值 ) ) 逻辑思路: 分页属于老生长谈了,这里的实现主要从分页按钮生成模块、

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论