锚的神秘面纱_html/css_WEB-ITnose
之前我是这样认为的:锚是一个href="#id"或者“#name”这种a标签,主要用于页面内元素的快速定位,实现书签或者目录的功能。
后来我改变了对锚的看法,才识庐山真面目。
现在我对它的有了全新的认识:锚是一个anchor标签,即标签。锚通过href属性可以链接到其它页面,也可以链接到当前页面的某个位置。
我们平时常说的锚点,或者锚链接,其实都是锚,叫法虽然不同但是本质一样,就像“西红柿”和“番茄”一样,只是一种叫法。网上对锚点或者锚链接的解释也是五花八门,存在有歧义的问题最好去官方网站上寻求答案,比如MDN或者W3C(FQ版,中文版更新的慢,而且不一定准确)寻找答案。
锚在MDN上是这样描述的“
The HTML Anchor Element () defines a hyperlink to a location on the same page or any other page on the Web. It can also be used (in an obsolete way) to create an anchor point—a destination for hyperlinks within the content of a page, so that links aren't limited to connecting simply to the top of a page.
我英语不好,但是还是能读懂这句话的意思。这里就不作翻译了,怕出丑。
我们可以通过document.anchors[] 数组来获取锚,也可以使用 document.getElementById()或者其它获取dom对象的方法。
注意:document.anchors[]只能获取带有那么属性的锚,如果锚没有name属性,可以通过document.getElementById()访问。
hash
MDN上是这样描述"The HTMLHyperlinkElementUtils.hash property returns a DOMString containing a '#' followed by the fragment identifier of the URL. The fragment is not percent-decoded."
大概意思就是url#号后面(包含#)的片段,这个片段不是被压缩过得(后面这句我也不知道怎么翻译........)。
hash是一个可读可写的属性,有两种方式可以取得hash,window.location.hash或者用window.location.href然后通过第一个#进行截取
hash的可以用来跨域,通过iframe加上location.hash组合方式实现js跨域,还可以利用hashchange实现ajax前进后退或者单页面试图切换,比如Angular路由
onhashchange
MDN这样介绍的:
The hashchange event is fired when the fragment identifier of the URL has changed (the part of the URL that follows the # symbol, including the # symbol).
当url#号后的字符包括#号发生改变时会触发onhashchange事件。
那么怎么才会改变#号后的内容呢?
主要有四种方式:
1、手动改变浏览器地址栏的url的hash值,即修改url#号后面的部分
2、通过代码改变hash值,如window.location.href = "url#hash",或者window.location.hash = "yourhash"。
3、通过锚改变hash值,href="#号+id"或者href="#号+name"。
4、通过浏览器自带的前进和后退也有可能触发onhashchange,因为hash改变虽然没有进行页面reload,但是会将hash改变后的url写入历史中,比如点击一个锚链接,页面滚动到某个位置,此时url的hash值已经改变,点击后退按钮会触发hashchange。
举栗,利用hash原理实现ajax前进后退功能
我们都知道ajax请求不会在浏览器中产生历史记录,如果想看前一个请求的数据,按浏览器的后退键是没有用的,只有重新填写查询条件,然后再执行查询才能得到想要的结果。这样在有些场景下是不合理的。利用hashchange解决上面的的问题,举栗子:
ajax请求是58同城里的搜索框的数据,输入苹果->搜索,输入橙子->搜索,点击后退按钮回到苹果列表页面。
下面是一种实现方式。感兴趣的可以亲自试一下。
hashchange
本章内容就完稿了,内容虽然不多,但是却花费了很大的精力,总之收获还是多多的。
其实我这篇文章就阐述了一个观点,锚不仅仅是定位而已。
如果你觉得我哪里说的不正确,还望指正。
上一篇: php 发送带附件邮件示例_php实例
下一篇: php的变量与运算符
推荐阅读
-
关于在HTML表格中插入背景图片图片重复显示的问题_html/css_WEB-ITnose
-
CSS实现的兼容所有浏览器的div悬浮在网页一侧的代码_html/css_WEB-ITnose
-
移除IOS下按钮的原生样式_html/css_WEB-ITnose
-
HTML-移动端如何使用css让百分比布局的弹窗水平和垂直方向上居中_html/css_WEB-ITnose
-
10套免费的 Photoshop UI 元素以及 PSD 素材_html/css_WEB-ITnose
-
[前端框架] Bootstrap 3 与 Foundation 5 的五大区别 (译)_html/css_WEB-ITnose
-
求一个社团管理系统的全部html页面!本人不会html,css!谢谢_html/css_WEB-ITnose
-
潮流设计:15个创意的 3D 字体版式作品欣赏_html/css_WEB-ITnose
-
解说css中的margin属性缩写方式_html/css_WEB-ITnose
-
隔壁的牛大说“不行,这个还得改进~”_html/css_WEB-ITnose