页内导航插件编写后总结

1、在_render:function(){}中添加一个方法_addFrame(){}用来构建整个页面的dom结构。

 1 _addFrame:function(){
 2             var g=this,p=this.options,el=g.el;
 3             el[0].innerHTML=‘‘;
 4             var _htmltempl=‘<div id="sideToolbar" style="position: fixed;">‘+
 5                             ‘<div id="sideCatalog" class="sideCatalogBg" style="visibility: visible;">‘+
 6                                 ‘<div id="sideCatalog-sidebar">‘+
 7                                    ‘ <div class="sideCatalog-sidebar-top"></div>‘+
 8                                     ‘<div class="sideCatalog-sidebar-bottom"></div>‘+
 9                                 ‘</div>‘+
10                                 ‘<div id="sideCatalog-updown" style="visibility: visible;">‘+
11                                 ‘    <div id="sideCatalog-up" class="sideCatalog-up-disable" title="向上翻页"></div>‘+
12                                 ‘    <div id="sideCatalog-down" class="sideCatalog-down-enable" title="向下翻页"></div>‘+
13                                 ‘</div>‘+
14                                 ‘<div id="sideCatalog-catalog">‘+
15                                 ‘   <dl style="zoom:1"></dl>‘+
16                                 ‘</div>‘+
17                             ‘</div>‘+
18                             ‘<div class="btn-box">‘+
19                                 ‘<a id="sideCatalogBtn" class=""  title="隐藏" style="visibility: visible;" href="javascript:void(0);"></a>‘+
20                                 ‘<a id="sideToolbar-up" style="visibility: visible;" title="返回顶部" href="javascript:void(0)"></a>‘+
21                             ‘</div>‘+
22                             ‘</div>‘;
23             g.sidetoolbar=$(_htmltempl).css({"bottom":p.bottom+"px","right":"10px","width":p.width+‘px‘}).appendTo(el);
24         },

2、在_render:function(){}中添加一个_blidData()方法,用于生成导航节点的名字。这里要注意,导航节点的名字是根据内容部分的标题来生成的。但是如果查找所有的标题用于生成节点呢,在写页面标题的时候,要使用我们默认固定的class名。比如以headline开头。

查找到所有的标题后,进行遍历,将每一个都追加到导航节点中。

 1 var g=this,p=this.options,el=g.el;
 2             p=( options ? $.extend(p,options): p);
 3             g.targetSelector=( p.targetSelector==undefined || p.targetSelector==null ? $("body") : $(p.targetSelector) ) ;
 4             var allEle = g.targetSelector.find(‘:header[class*="headline"]‘);
 5             g.allEle=allEle;
 6             g.headLen = allEle.length;
 7             var ddArr = [];
 8             //根据页面内容生成slide导航;
 9             allEle.each(function(i){
10                 var sideIndex,
11                     sideName,
12                     ddId,
13                     highlight=‘‘,
14                     ddClass,
15                     sideAnchor;
16                 sideName = $(this).find(‘.headline-content‘).text();
17                 if($(this).hasClass(‘headline-1‘)){
18                     sideAnchor = sideIndex = $(this).find(‘.anchor-1‘).eq(0).attr(‘name‘);
19                     ddClass = ‘sideCatalog-item1‘;
20                 }else{
21                     sideAnchor = $(this).find(‘.anchor-2‘).eq(0).attr(‘name‘);
22                     sideIndex = sideAnchor.replace(‘-‘,‘.‘);
23                     ddClass = ‘sideCatalog-item2‘;
24                 }
25                 ddId = ‘sideToolbar-item-0-‘+ sideAnchor;
26                 if(i==0){
27                      highlight = ( p.showCurIcon ? ‘highlight‘ : ‘‘);
28                 }
29                 var ddHtml = ‘<dd id="‘+ ddId +‘" class="‘+ddClass + ‘ ‘ + highlight +‘">‘
30                         +       ‘<span class="sideCatalog-index1">‘+ sideIndex +‘</span>‘
31                         +       ‘<a class="nslog:1026" onclick="return false;" title="‘+sideName+‘" href="#‘+sideAnchor+‘">‘+ sideName +‘</a>‘
32                         +       ‘<span class="sideCatalog-dot"></span>‘
33                         +    ‘</dd>‘;
34                 ddArr.push(ddHtml);
35             });

3、在编写过程中会设计到很多的变量,如果让这些变量在别的方法中也能用呢?

将这些变量添加到this中。这里用到了jquery中的核心方法$(selector,contnet)

4、窗口大小改变时导航条的高度也自动调整

导航条的高度是自动获取到的。用整个页面的高度-导航条中下面按钮的高度-导航条距顶端的高度-导航条距离底部的高度。

$(window).resize():当调整浏览器窗口的大小时,发生 resize 事件。

这里的高度涉及到几个方法 clientHeight、outerHeight()、

http://www.jb51.net/article/43470.htm(这里有详细介绍)

 1 autoHeight:function(){
 2             var g=this,p=this.options,el=g.el;
 3             var owinHeight=$(document.body)[0].clientHeight;
 4             var sidetoolbarHeight=owinHeight-g.btnBoxHeight-parseFloat(p.bottom)-parseFloat(p.top);
 5             p.minHeight=parseInt(p.minHeight)
 6             if(sidetoolbarHeight<p.minHeight){
 7                 sidetoolbarHeight=p.minHeight;
 8             }
 9             if(p.height!=="auto"){
10                 sidetoolbarHeight=parseInt(p.height);
11             }
12             g.sideCatalog.css("height",sidetoolbarHeight);
13             g.sidebar.css("height",sidetoolbarHeight);
14             g.sideCatCatalog.css("height",sidetoolbarHeight-36);
15             g.sideCatCatalogHeight=sidetoolbarHeight-36;
16             g.visibleDdCount=Math.ceil(g.sideCatCatalogHeight/g.ddHeight);
17             g._judge();
18         },

5、点击导航节点,内容部门要滚动到节点对应的内容,如果导航的长度比可是区域长,点导航后面的部分,也要出现向上滚动,以显示后面的内容。

这里涉及到的有scrollTop、定时器

scrollTop:scrollTop() 方法返回或设置匹配元素的滚动条的垂直位置。

http://www.jb51.net/article/26141.htm(有关定时器的几个方法)

6、滑动滚动条,导航条的节点要跟着内容部门依次被选中

这里用到了$(window).scroll();

animate():该方法通过CSS样式将元素从一个状态改变为另一个状态。CSS属性值是逐渐改变的,这样就可以创建动画效果。

7、在导航条的显示与隐藏中用了css()方法

首先注意这个方法是Jquery的方法

  sideCatalog.css(‘visibility‘,‘hidden‘);visibility:hidden和display:none的区别是,前者还会占位置,后者不会。

时间: 2024-10-27 19:23:58

页内导航插件编写后总结的相关文章

Windows Store App JavaScript 开发:页内导航

页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用PageControlNavigator控件加载其他页面的内容.WinJS.Navigation.navigate函数以一个包含页面地址的对象为参数,在该函数执行时将触发WinJS.Navigation.onnavigated事件并把页面地址传递给该事件.PageControlNavigator控件

jquery单页网站导航插件One Page Nav

这是一个轻量级的jQuery的单页网站导航插件.增加了单击后平滑滚动导航和当你浏览不同的部分时自动选择正确的导航项. changeHash: false, 改变当用户单击导航,就改变changeHash选项为true. scrollSpeed: 750, scrollThreshold: 0.5, filter: '', easing: 'swing', begin: function() { //I get fired when the animation is starting }, end

Win10系列:JavaScript页内导航

页内导航是在一个页面内根据需要加载其他页面的内容,在开发基于JavaScript的Windows应用商店应用时,可以使用WinJS.Navigation.navigate函数传递要加载的页面地址并使用PageControlNavigator控件加载其他页面的内容.WinJS.Navigation.navigate函数以一个包含页面地址的对象为参数,在该函数执行时将触发WinJS.Navigation.onnavigated事件并把页面地址传递给该事件.PageControlNavigator控件

页内导航跳楼事件

目的:使用侧边栏实现业内导航. 思路:一种是通过a标签链接的方式,一种是通过jQuery通过控制滚动条的scrollTop值来进行控制.这里重点介绍JQuery的方式,先写静态页面,然后在通过规律写出jQuery语句. 布局如下(在这之前引用了清除列表样式文件和重置文件): <style> div{ width: 1024px; margin: 0 auto; } img{ width: 1024px; height: 768px; display: block; } p{ width: 10

MVC4--导航页内使用Partialview并传入Model定义导航

1,在基类ApplicationController里面定义  模板页Layout需要使用的ViewModel[实际逻辑已经实现,这里不显示代码] 直接上图 2,在Views-->Shared  文件夹右键 新建  部分试图   命名为   _TopMenuVModel 在顶部 引入 模型 下面 写入 你的对应 页面 模型 可以直接 调用       @foreach (var m10 in Model.TopMenuList) Model--> xxx    你的ViewModel内定义的

Win10 UWP 开发系列:使用SplitView实现汉堡菜单及页面内导航

在Win10之前,WP平台的App主要有枢轴和全景两种导航模式,我个人更喜欢Pivot即枢轴模式,可以左右切换,非常方便.全景视图因为对设计要求比较高,自己总是做不出好的效果.对于一般的新闻阅读类App来说,Pivot更适合多个频道的展示,因为内容基本都是一样的. 到了Win10,微软模仿其他平台也推出了汉堡菜单,但并没有提供现成的控件,而是需要开发者通过一个名为SplitView的控件来实现.我个人并不觉得左上角的菜单有多么方便,汉堡菜单的使用必然会改变以前的导航模式,比如以前底部的AppBa

WPF,Silverlight与XAML读书笔记第十五 - 页间导航 页间数据传递

?说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘>的编排,对内容进行了总结并加入一些个人理解. 导航 有关导航的话题在介绍NavigationWindow与Page等元素时有提及.这篇文章将详细分析导航相关话题.同其它话题,针对WPF,Silverlight与WP 7,导航特性大致相似又有着些许不同.在介绍此特性时相同的特性将合在一起,每个框架独有的特性也将独立介绍并有明显标识. 导航的功能及目的就是从一个页面转向另一个页面,可能是前进亦或是后

自己动手丰衣足食之征服jQuery插件编写

原文地址:http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html 要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈. 学会使用jQuery并不难,因为它简单易学,并且相信你接触jQuery后肯定也使用或熟悉了不少其插件.如果要将能力上升一个台阶,编写一个属于自己的插件是个不错的选择.

typecho插件编写教程1 - 从HelloWorld说起

typecho插件编写教程1 - 从HelloWorld说起 老高 187 5月25日 发布 推荐 0 推荐 收藏 2 收藏,189 浏览 最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的不断深入,老高也慢慢上手了,于是总结出此篇编写教程分享给大家! 如果你对typecho的源码有兴趣,可以参考老高的系列文章 typecho源代码解析1 - 系统初始化typecho源代码解析2 - 插件机制t