location是javascript里邊管理地址欄的內置對象,比如location.href就管理頁面的url,用location.href=url就可以直接將頁面重定向url。而location.hash則可以用來獲取或設置頁面的標簽值。

比如http://domain/#admin的location.hash="#admin"。利用這個屬性值可以做一個非常有意義的事情。

很多人都喜歡收藏網頁,以便於以后的瀏覽。不過對於Ajax頁面來說的話,一般用一個頁面來處理所有的事務,也就是說,如果你瀏覽到一個Ajax頁面里邊有意思的內容,想將它收藏起來,可是地址只有一個呀,下次你打開這個地址,還是得像以往一樣不斷地去點擊網頁,找到你鍾情的那個頁面。另外的話,瀏覽器上的“前進”“后退”按鈕也會失效,這於很多習慣了傳統頁面的用戶來說,是一個很大的使用障礙。

那么,怎么用location.hash來解決這兩個問題呢?其實一點也不神秘。

比如,我的作者管理系統,主要功能有三個:普通搜索、高級搜索、后台管理,我分別給它們分配一個hash值:#search、#advsearch、#admin,在頁面初始化的時候,通過window.location.hash來判斷用戶需要訪問的頁面,然后通過javascript來調整顯示頁面。比如:

復制代碼 代碼如下:

var hash;

hash=(!window.location.hash)?"#search":window.location.hash;

window.location.hash=hash;

//調整地址欄地址,使前進、后退按鈕能使用

switch(hash){

case "#search":

selectPanel("pnlSearch"); //顯示普通搜索面板

break;

case "#advsearch":

case "#admin":

}

通過window.location.hash=hash這個語句來調整地址欄的地址,使得瀏覽器里邊的“前進”、“后退”按鈕能正常使用(實質上欺騙了瀏覽器)。然后再根據hash值的不同來顯示不同的面板(用戶可以收藏對應的面板了),這就使得Ajax頁面的瀏覽趨於傳統化了。

-------------------------------------------------------------------------------------------------------------------------------------------------------

關於錨點跳轉及jQuery下相關操作與插件

這篇文章發布於 2010年07月15日,星期四,20:47,歸類於 jquery相關。 閱讀 79427 次, 今日 44 次

一、錨點跳轉簡介

錨點嘛,業余點的解釋就是可以讓頁面定位到某個位置的點。在高度較高的頁面中經常見到,例如,百度百科頁面,《火影忍者》這個詞條,結果就會看到如下的錨點列表:

點擊其中一個鏈接,就會跳轉到頁面的相應位置。這就是錨點的作用之一。錨點還可以用在跳轉到其他頁面的相應位置,例如我的博客,點擊博客首頁文章下面的評論鏈接,則會跳轉到文章的評論處。

起關鍵作用的就是鏈接地址后面跟着的#comments,見下圖標示:

我知道的實現錨點跳轉有兩種方式,一種是a標簽+name屬性,還有一種就是使用標簽的id屬性。百度百科就是使用的a標簽的name屬性實現錨點跳轉的,見下圖:

上圖效果更具體點表示是:

作者介紹>

早在大學跟某女交往的那會兒,我就已經放棄使用a+name的錨點方法了。一是使用了一個空標簽,有鋪張浪費,挪用公款之嫌;二是經常會出現錨點失 效的情況。所以,我都是使用id來綁定錨點的,迄今為止,沒有出過什么紕漏。如果使用id實現,則上圖所示效果對應代碼應該類似下面:

作者介紹>

作者介紹

說明:本文下面所有錨點內容專指id錨點。

二、含錨點跳轉的URL地址

1. 關於”#”

在頁面制作中,”#”這個符號相當常見,且具有一定的通用性。基本上,其表示的含義是id選擇符。例如在CSS中#header{}就表示id為header標簽的樣式如何如何;在jQuery中,$(“#header”)表示選擇id為header的標簽為jQuery對象;同樣的,在頁面的URL中,”#”也可以理解為id選擇符之意,也就是頁面跳轉到含URL指向的id的標簽處。

例如,我們在瀏覽器地址欄中輸入或是復制如下URL:http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html#0

由於URL地址末尾帶有”#”標識符,這就相當於告訴瀏覽器:“哥,小妹要跳了,你要接好我哦!

”。由於”#”后面跟着的是0,所以呢,瀏覽器就會在地址為http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html的頁面上尋找符合”#0″特點的標簽,並執行跳轉。在此頁面上,有個js動態創建的漸變背景,從上到下有256個標簽,id從0~255,我們看下firebug下的html代碼展示。

所以,這個頁面載入后,應該立即跳轉到漸變背景的頂部。如下圖所示:

您可以狠狠地點擊這里:“#0″錨點的跳轉測試

2. 關於空錨點指向

如果URL中”#”后面跟隨的字符id在文中找不到,那么會如何呢?如果是在當前頁面,則頁面沒有跳轉,唯一變化的就是URL地址;如果是從其他頁面跳轉過來,則頁面頂部顯示,”#”基本上就是聾子的耳朵——擺設。

您可以狠狠地點擊這里:空錨點頁面跳轉測試,這里的錨點標示是”#aaa”,但是由於頁面上沒有id為”aaa”的標簽或是name為”aaa”的a標簽,所以,”#aaa”純粹就是個打醬油的。

再如果,頁面的URL后面只有一個孤單的”#”,或是頁面某鏈接指向單單是個”#”(),則頁面頂部顯示。所以,一般頁面的回到頂部效果都是使用一個孤單的”#”作為錨點鏈接的。例如淘寶網的返回首頁:

對應的html代碼如下圖所示:

三、jQuery下錨點的平滑跳轉

對於錨點的平滑跳轉,我覺得要謹慎使用,在個人站點或是這個效果含有功能提示可以用一用,在一般的商業性質的網站上,權衡來講,不用更好,當然,這只是我的個人意見。jQuery庫已經為我們做了很多的工作了,所以,在jQuery下實現錨點的平滑跳轉是簡單輕松的。例如,我們要讓頁面平滑滾動到一個id為box的元素處,則jQuery代碼只要一句話,如下:

$("html,body").animate({scrollTop: $("#box").offset().top}, 1000);

其中animate為jQuery自定義動畫方法,$(“#box”).offset().top表示id為box的jQuery對象距離頁面頂部的偏移值,1000表示平滑動畫執行的時間為1000毫秒,也就是1秒。

為了直觀的表示效果,我做個個簡單的demo頁面。您可以狠狠地點擊這里:錨點平滑跳轉demo

點擊下圖所示文字鏈接,就可以看到平滑跳轉效果了:

相應的代碼如下:

HTML部分

平滑跳轉到底部:滑到底部

平滑回到頂部:回到頂部鏈接

JS部分

$(".smooth").click(function(){

var href = $(this).attr("href");

var pos = $(href).offset().top;

$("html,body").animate({scrollTop: pos}, 1000);

return false;

});

四、IE下錨點刷新失效及jQuery下的解決

1、關於錨點刷新失效

所謂“錨點刷新失效”指的是當我們再次刷新頁面(F5)的時候,即使此時的URL后面就隨錨點,此錨點也是不起作用的。

還是拿最開始的例子演示,,我們在瀏覽器地址欄中輸入或是復制如下URL:http://www.zhangxinxu.com/study/201007/anchor-jump-test-1-demo.html#0,或是點擊這里。我們第一次進入這個頁面的時候,錨點是正常的,頁面定位到漸變背景的頂端。ok,現在,我們把頁面滾動到頂部,如下圖所示:

此時,我們再按下瀏覽器刷新按鈕(或是F5),可以看到在IE瀏覽器下,頁面依舊頂部顯示,也就是說頁面的錨點(#0)不再起作用了。大多數情況下,可能對我們的影響不是很大,但是有時候,例如我們在論壇里發布了一個帖子,發帖頁面和帖子列表頁面是同一頁面,帖子提交后,我們想把頁面定位到剛發的帖子處,在IE瀏覽器下就無法通過修改URL加錨點的方式實現。

如果讓IE瀏覽器即使是同一URL刷新也能實現錨點定位呢?在jQuery下,不難實現。我們可以根據URL獲取錨點,從而進一步獲得對應的錨點對象,然后再讓頁面的滾動高度為其距離頁面頂部的偏移值就可以了。文字敘述再精彩也不及實例來的直觀,例如我們要處理一個鏈接地址為:http://www.zhangxinxu.com/study/201007/anchor-jump-test-3-demo.html#0的頁面,要讓其無論是重新載入還是當前頁面刷新,其后面的錨點地址”#0″都要起作用。

其js代碼如下,(與頁面內容無關)

$(function(){

var url = window.location.toString();

var id = url.split("#")[1];

if(id){

var t = $("#"+id).offset().top;

$(window).scrollTop(t);

}

});

五、jQuery任意標簽錨點跳轉插件

上面所有提到錨點跳轉的發起要不是頁面的載入,要不就是a標簽通過鏈接發起。其實我們可以點擊任意標簽實現錨點的跳轉的。所以,我就特別寫了個簡單的jQuery插件,以實現任意標簽頁面任意位置的錨點跳轉(可平滑)。

demo及下載

您可以狠狠地點擊這里:jquery.anchor.1.0.js 1015字節 [右鍵-目標|鏈接另存為]

點擊demo的文字鏈接或是按鈕,均有跳轉效果。

參數

參數

默認

解釋

ieFreshFix

true

布爾型,默認修復IE下刷新錨點不起作用的問題

anchorSmooth

true

布爾型,默認平滑跳轉

anchortag

anchor

字符串,用以綁定id的標簽屬性,默認是"anchor",屬於自定義屬性

animateTime

1000

整數,動畫執行的時間,如果anchorSmooth為false,則此參數無效

插件使用

此插件的方法為:zxxAnchor()。

插件插件要想使用,需要對觸發錨點跳轉的標簽進行一些設置。在默認情況下,要給標簽添加一個自定義的屬性anchor,例如:

點擊我吧

這里的按鈕就添加了一個自定義的anchor屬性,屬性值是”top”,表示的意思就是頁面跳轉到id為top的元素處。此時直接調用zxxAnchor方法就可以了,如下代碼:

$("#btnTop").zxxAnchor();

當然,我們可以不使用默認的anchor標簽,例如我們可以使用a標簽的href屬性,只要在綁定zxxAnchor方法時修改下參數就可以了,例如:

滑到底部

對於的jQuery代碼如下:

$(".smooth").zxxAnchor({

anchortag: "href"

});

對照上面的參數表可知,上面的代碼是設置綁定錨點對象的屬性由默認的”anchor”改為了”href”。

基本使用就是如此,其他一些參數您可以參見上面的參數表,這里不多說了。

插件優點

支持任意標簽,任意位置的錨點跳轉,支持平滑效果。同時不改變頁面的URL地址。

html js什么作用,html錨點的作用和js選項卡錨點跳轉的使用相关推荐

  1. html进制转换js代码,JS中的进制转换以及作用

    js的进制转换, 分为2进制,8进制,10进制,16进制之间的相互转换, 我们直接利用 对象.toString()即可实现: 运行下面代码 //10进制转为16进制 (10).toString(16) ...

  2. [js] callee和caller的区别和作用是什么?

    [js] callee和caller的区别和作用是什么? arguments.callee 指的是当前函数 Function.caller 指的是调用当前函数的函数 举个例子:function a() ...

  3. js文件中可以写html吗,js代码写在HTML正常,分离成js文件再在HTML中引用不起作用...

    js代码写在HTML功能正常,分离成js文件再在HTML中引用却不起作用 js代码片段,功能是调用高德地图JS API,并做些布局调整 var map = new AMap.Map("con ...

  4. JS中 new FormData() - FormData对象的作用及用法

    JS中 new FormData() - FormData对象的作用及用法 js FormData 方法介绍 formData是ajax2.0(XMLHttpRequest Level2)新提出的接口 ...

  5. 使用JShaman进行JS代码加密时,保留字的作用

    使用JShaman进行JS代码加密时,保留字的作用 JShaman是一个在线加密JS代码的网站, 它有一个功能:字符串加密,可以把JS代码中明文的字符串加密起来,使字符串不可见. 例如: 如上图,一个 ...

  6. 转载 iOS js oc相互调用(JavaScriptCore) --iOS调用js

    iOS js oc相互调用(JavaScriptCore) 从iOS7开始 苹果公布了JavaScriptCore.framework 它使得JS与OC的交互更加方便了. 下面我们就简单了解一下这个框 ...

  7. 原生js获取document_【JS 口袋书】第 9 章:使用 JS 操作 HTML 元素

    作者:valentinogagliardi 译者:前端小智 来源:github 这几天自己的公众号无套路送现金 200+,参与方式如下 OKR 与 KPI 的区别(文中无套路送现金 200+) 文档对 ...

  8. js 转json_2020年了为啥 还要学 Node.js

    前言 前些日子刷知乎看到个 2019 年初的问题 2019年nodejs凉了吗?凉到什么程度了?才看到问题的时候吃了一惊,是不是我在的公司大量使用 Node.js 让我有了幸存者偏差,前端社区已经沧海 ...

  9. Node.js (上)(超级详细的node.js学习笔记 !!!)

    目录 一.初识Node.js与内置模块 1.之前知识回顾(为Node.js理解做铺垫) 1.1浏览器中的js的组成部分 1.2 为什么js可以在浏览器中被执行 1.3 为什么浏览器可以操作Bom和Do ...

最新文章

  1. CSS HACK:IE6、IE7、IE8、Firefox兼容性问题解决方案
  2. isNumeric isInteger isDate
  3. 添加用户信息的方法java_添加用户的流程分析
  4. 2018湖湘杯web、misc记录
  5. SPT20 协议_协议离婚协议书模板锦集6篇
  6. article之api文档
  7. 华为鸿蒙系统腾讯,腾讯内容开放平台
  8. Android:解决Failed to load D:\Android-Studio\sdk\build-tools\xx.xx.xx\lib\dx.jar
  9. 计算机必备四大游戏,超大型游戏必备插件
  10. 给定一个候选人编号的集合 candidates 和一个目标数 target ,找出 candidates 中所有可以使数字和为 target 的组合。
  11. Python 玩转数据 12 - 数据读写 Data I/O: Pandas 读写 JSON File Format
  12. 代码随想录第六天 LeetCode 242、349、202、1 (哈希表)
  13. 长沙到底有没有互联网?
  14. vite安装失败问题Emitted ‘error‘ event on ChildProcess instance at:-4058esbuild.exe
  15. BeanUtils.populate()方法的简单使用
  16. MapReduce模型过程详解
  17. padding的用法
  18. 【Linux】常用工具
  19. 【算法设计与分析】8枚硬币及n枚硬币问题
  20. php网页右下方广告窗口,javascript实现右下角广告框效果

热门文章

  1. 关于oracle数据库的操作的命令
  2. 永洪Desktop关于MAC系统使用问题
  3. 服务体系总出bug,咸鱼社交挤压,转转的综合性二手电商还好做吗?
  4. mysql 二进制日志查看_使用mysqlbinlog从二进制日志文件中查询mysql执行过的sql语句 (原)...
  5. 外星人计算机产品介绍,你对外星人电脑了解吗?感兴趣快看看!
  6. linux 匹配文本中的ip,linux文本三剑客匹配网卡IP地址大PK(CentOS 7系统)
  7. python常用面试题_史上最全Python工程师常见面试题集锦,有这一份就够了
  8. 组件skype服务器,Skype for Business Server 中的中介服务器组件
  9. basler相机的触发线是那两脚_机器视觉相机类型以及接口标准详解
  10. 从0搭建一个Springboot+vue前后端分离项目(一)安装工具,创建项目