Page Scroll Menu (页面中锚点菜单)

时间:2022-04-20 01:28:33

 

当页面太长时,会导致浏览不便,这时就需要一个页面锚点菜单(Page Scroll Menu),方便用户快速了解页面的概要及目录并快速定位到相应的目录。

实现方式:

1. 将页面按照内容分成不同的Section, 页面加载时读取各个Section并生成Menu,点击对应的Menu时计算对应Section的位置并设置其位置。

示例 1:http://www.outyear.co.uk/smint/, http://www.outyear.co.uk/smint/demo/

示例 2:http://manos.malihu.gr/page-scroll-to-id

2.  在页面中根据内容插入A标签,定义锚点,在页面加载时收集这些锚点并生成Menu,点击Menu时直接跳转到相应的锚点。

示例 1: http://sympies.com/pagescroll_jquery_menu/

示例 2:HPEMEA项目中的Author模块,主要代码摘录如下:

(function () {
if (window.SideAnchorMenu == undefined) {
window.SideAnchorMenu = function () {
this.isInited = false;
};
} SideAnchorMenu.prototype.init = function (showTop, forceInit) {
if (forceInit === false && this.isInited) return;
var anchorMenu;
if ($("#divSideAnchorMenu").size() == 0) {
if (showTop) {
anchorMenu = $("<div><img src='/Modules/Aximpro.DotNetValue.Anchor/Content/Images/axLogo.png' alt='axLogo' id='axlogo' /><br/><hr id='logo-separator'><br/></div><div><ul><li><a href='#'><span></span><div>Top</div></a></li></ul></div>");
}
else {
anchorMenu = $("<div><img src='/Modules/Aximpro.DotNetValue.Anchor/Content/Images/axLogo.png' alt='axLogo' id='axlogo'/><hr id='logo-separator'></div><div><ul></ul></div>");
}
anchorMenu.attr("id", "divSideAnchorMenu");
$("body").append(anchorMenu);
} else {
anchorMenu = $("#divSideAnchorMenu");
anchorMenu.find("ul").empty();
}
var $ul = anchorMenu.find("ul");
var eventHandler = {
anchorMenuItemClick: function () {
$ul.find("li").removeClass("active");
$(this).addClass("active");
},
windowScollHandler: function () {
$ul.find("li").removeClass("active");
var windowScrollTop = $(this).scrollTop();
var windowHeight = $(window).height();
var forcedLi;
$(".anchorMark").each(function () {
var anchorOffsetTop = $(this).offset().top;
if (anchorOffsetTop <= windowScrollTop + windowHeight/3) {
forcedLi = $ul.find("a[href='#" + $(this).attr("id") + "']").parent();
var bgImage = document.body.style.backgroundImage
if (document.body.style.backgroundImage.toString().indexOf($(this).attr("id") + ".jpg", 0) == -1) { document.body.style.background = "url(/Skins/Single_Page/1.0/backgrounds/" + $(this).attr("id") + ".jpg) no-repeat center center fixed";
document.body.style.backgroundSize = "cover";
}
}
}); if (forcedLi) {
forcedLi.addClass("active");
} else {
$ul.find("a[href='#']").parent().addClass("active");
}
}
}; $(".anchorMark").each(function (i, item) {
var $item = $(item);
var anchor = $("<a><span></span><div></div></a>");
anchor.attr("href", "#" + $item.attr("id"));
anchor.attr("class", 'anchor-item');
anchor.find("div").text($item.attr("title"));
var $li = $("<li></li>");
$li.append(anchor);
$ul.append($li);
$li.click(eventHandler.anchorMenuItemClick);
});
//$ul.pagescroll_menu({ "position": "right", "fontfamily": "Forum" }); $(window).scroll(eventHandler.windowScollHandler);
this.isInited = true;
};
<!--//--><![CDATA[//><!--
$(document).ready(function () { $('a[href*=#]:not([href=#])').click(function () {
if (location.pathname.replace(/^\//, '') == this.pathname.replace(/^\//, '') && location.hostname == this.hostname) {
var target = $(this.hash);
target = target.length ? target : $('[name=' + this.hash.slice(1) + ']');
if (target.length) {
$('html,body').animate({
scrollTop: target.offset().top - 150 }, 800); return false;
}
}
}); if (window.SideAnchorMenuInstance == undefined) {
window.SideAnchorMenuInstance = new window.SideAnchorMenu();
window.SideAnchorMenuInstance.init(false);
}
});
//--><!]]>
})();

Page Scroll Menu (页面中锚点菜单)的更多相关文章

  1. 回发或回调参数无效。在配置中使用 pages enableEventValidation&equals;true 或在页面中使用 &percnt;&commat; Page EnableEventValidation&equals;true &percnt; 启用了事件验证

    WebForm中回发或回调参数无效问题的解决 解决 .NET中回发或回调参数无效问题的解 该错误的详细提示信息为: 回发或回调参数无效.在配置中使用 <pages enableEventVali ...

  2. Page Scroll Effects - 简单的页面滚动效果

    Codyhouse 收集了一组页面滚动效果,就是目前大家很常见的用户在浏览网页的时候.一些效果虽然极端,但如果你的目标是创建一个身临其境的用户体验,他们是非常有用的.所有的动画都使用 Velocity ...

  3. 从下拉菜单拖拽一个元素 出来,插入到页面中的app 列表中

    1,实现功能:从下拉菜单拖拽一个元素 出来,插入到页面中的app 列表中 并实现app向后移动一个元素的位置: 2.实现思路: 01.遍历下拉菜单,添加拖拽方法,实现位置移动功能: 02.遍历app列 ...

  4. 回发或回调参数无效。在配置中使用 &lt&semi;pages enableEventValidation&equals;&quot&semi;true&quot&semi;&sol;&gt&semi; 或在页面中使用 &lt&semi;&percnt;&commat; Page EnableEventValidation&equals;&quot&semi;true&quot&semi; &percnt;&gt&semi; 启用了事件验证。

    问题补充: “/Source”应用程序中的服务器错误. 回发或回调参数无效.在配置中使用 <pages enableEventValidation="true"/> 或 ...

  5. Jsp页面中常见的page指令

    注:图片如果损坏,点击文章链接:https://www.toutiao.com/i6513327323628962312/ 1.<JSP页面实际上就是Servlet> 2.<JSP页 ...

  6. 前端开发css实战:使用css制作网页中的多级菜单

    前端开发css实战:使用css制作网页中的多级菜单 在日常工作中,大家都会遇到一些显示隐藏类菜单,比如页头导航.二维码显示隐藏.文本提示等等......而这些效果都是可以使用纯css实现的(而且非常简 ...

  7. jsp页面中引用其他页面的方法

    初看这个标题....大家的感觉一定是好2啊.....博主一定要说jsp的动态引用(jsp:include)和静态引用(@include)了.介绍这两者区别的文章已经烂大街了..一搜一大把..博主竟然还 ...

  8. HTML页面中常见的一些小方法

    在<Head>标签中加   <meta http-equiv="pragma " content="no-cache"> <met ...

  9. JQuery 根据ID在页面中定位

    1.锚点跳转简介 锚点其实就是可以让页面定位到某个位置上的点.在高度较高的页面中经常见到.比如百度的百科页面,wiki中的page内容. 我知道实现锚点的跳转有两种形式,一种是a标签+name属性:还 ...

随机推荐

  1. mysql成绩排名

    关于mysql成绩排名,网上大部分只是order by简单排序,忽略了成绩相同并列名次的问题. 定义了一个表score结构为:

  2. Log4j的使用

    一,Log4j简介 日志的三个目的: 1. 监视代码中变量的变化情况,周期性的记录到文件*其他应用进行统计分析工作                      2.跟踪代码运行时轨迹,作为日后审计的依 ...

  3. svg学习(六)line

    <line> 标签用来创建线条. <?xml version="1.0" standalone="no"?> <!DOCTYPE ...

  4. &lbrack;转&rsqb;Getting Start With Node&period;JS Tools For Visual Studio

    本文转自:http://www.c-sharpcorner.com/UploadFile/g_arora/getting-started-with-node-js-tools-for-visual-s ...

  5. 实时时钟、系统时钟和CPU时钟的区别

    http://blog.sina.com.cn/s/blog_68f909c30100pli7.html 实时时钟:RTC时钟,用于提供年.月.日.时.分.秒和星期等的实时时间信息,由后备电池供电,当 ...

  6. byte为什么要与上0xff&lpar;转&rpar;

    无意间翻看之间的代码,发现了一段难以理解的代码. byte[] bs = digest.digest(origin.getBytes(Charset.forName(charsetName))) ; ...

  7. webstorm常用快捷键及插件

    子曰:工欲善其事,必先利其器.那么问题来了,前端开发用什么比较好? 我反正用的是webstorm,之前也花了一些时间看看别人的使用方式.下面分类介绍一下. 常用快捷键: double shift : ...

  8. C&plus;&plus; 自定义订单号

    自定义订单号 #include<iostream> #include<stack> #include <time.h> #include <sys/timeb ...

  9. mha error

    MasterFailover.pm 1473 $ret =1474 $_server_manager->change_master_and_start_slave( $target, $late ...

  10. Spring点滴八:Spring注入集合

    在Spring中我们通过value属性来配置基本数据类型,通过标签的ref属性来配置对象的引用.这两种情况只能给bean传递一个值,那么如何传递多个值呢?Spring提供了四种Collection类型 ...