頁(yè)面內(nèi)錨點(diǎn)定位及跳轉(zhuǎn)方法總結(jié)(推薦)
接著上一篇,其實(shí)是一個(gè)功能,本來(lái)感覺挺簡(jiǎn)單的一個(gè)問(wèn)題,沒想到遇到兩個(gè)坎兒,無(wú)語(yǔ)。。。
上一篇是關(guān)于scroll事件綁定的問(wèn)題,這一篇的問(wèn)題是:點(diǎn)擊錨點(diǎn)跳轉(zhuǎn)到相應(yīng)DIV的問(wèn)題。
最簡(jiǎn)單的方法是錨點(diǎn)用<a>標(biāo)簽,在href屬性中寫入DIV的id。如下:
<!DOCTYPE html>
<html>
<head>
<style>
div {
height: 800px;
width: 400px;
border: 2px solid black;
}
h2 {
position: fixed;
margin:50px 500px;
}
</style>
</head>
<body>
<h2>
<a href="#div1" rel="external nofollow" >to div1</a>
<a href="#div2" rel="external nofollow" >to div2</a>
<a href="#div3" rel="external nofollow" >to div3</a>
</h2>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</body>
</html>
這種方法的缺點(diǎn)是點(diǎn)擊錨點(diǎn)之后,瀏覽器的URL會(huì)發(fā)生變化,如果刷新可能會(huì)出現(xiàn)問(wèn)題。
第二種方式是在js事件中通過(guò)window.location.hash="divId"跳轉(zhuǎn),但地址也會(huì)發(fā)生變化,感覺跟第一種方法沒區(qū)別,甚至更麻煩。
第三種方法是用animate屬性,當(dāng)點(diǎn)擊錨點(diǎn)后,頁(yè)面滾動(dòng)到相應(yīng)的DIV。接著上面的代碼,具體添加如下代碼:
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript"><br>$(document).ready(function() {
$("#div1Link").click(function() {
$("html, body").animate({
scrollTop: $("#div1").offset().top }, {duration: 500,easing: "swing"});
return false;
});
$("#div2Link").click(function() {
$("html, body").animate({
scrollTop: $("#div2").offset().top }, {duration: 500,easing: "swing"});
return false;
});
$("#div3Link").click(function() {
$("html, body").animate({
scrollTop: $("#div3").offset().top }, {duration: 500,easing: "swing"});
return false;
});
});
1
</script>
注意:運(yùn)行上面的腳本的之前,先將為錨點(diǎn)增加相應(yīng)的id,同時(shí)去掉href屬性?! ?/p>
$("html, body")可以替換為響應(yīng)的div,如果不起作用,試著給該div增加overflow:scroll屬性。
另外,腳本可以進(jìn)一步優(yōu)化,自己來(lái)試試
這樣做的好處是:URL地址不會(huì)變,同時(shí)點(diǎn)擊錨點(diǎn)時(shí)會(huì)自動(dòng)響應(yīng)scroll事件,不需要重新綁定。
缺點(diǎn)是:如果頁(yè)面復(fù)雜的話,偏移值可能會(huì)發(fā)生變化需要算法輔助。
第四種方法是用js的srollIntoView方法,直接用:
document.getElementById("divId").scrollIntoView();
這種方法的好處,是URL不會(huì)變,同時(shí)能夠響應(yīng)相應(yīng)的scroll事件,不需要算法什么的。
推介大家用第四種,我依次試了前三種,都有各種問(wèn)題(可能是頁(yè)面較復(fù)雜的緣故吧,當(dāng)然,技術(shù)不咋也是。。。)
以上所述是小編給大家介紹的頁(yè)面內(nèi)錨點(diǎn)定位及跳轉(zhuǎn)方法總結(jié)詳解整合,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
相關(guān)文章
vue中數(shù)組常用的6種循環(huán)方法代碼示例
在vue項(xiàng)目開發(fā)中,我們需要對(duì)數(shù)組進(jìn)行處理等問(wèn)題,這里簡(jiǎn)單記錄遍歷數(shù)組的幾種方法,這篇文章主要給大家介紹了關(guān)于vue中數(shù)組常用的6種循環(huán)方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-03-03
vue項(xiàng)目適配屏幕分辨率與屏幕的縮放適配詳細(xì)教程
現(xiàn)在很多14寸的筆記本,出廠默認(rèn)就是150%的顯示。導(dǎo)致很多時(shí)候我們的項(xiàng)目,自己開發(fā)的時(shí)候都是按照100%比例來(lái)開發(fā)的,上線了就會(huì)發(fā)現(xiàn)這個(gè)問(wèn)題,今天就這個(gè)問(wèn)題給出解決方案,感興趣的朋友跟隨小編一起看看吧2022-11-11
Vue+EleMentUI實(shí)現(xiàn)el-table-colum表格select下拉框可編輯功能實(shí)例
這篇文章主要給大家介紹了關(guān)于Vue+EleMentUI實(shí)現(xiàn)el-table-colum表格select下拉框可編輯功能的相關(guān)資料,element-UI表格的使用相信大家都不陌生,文中給出了詳細(xì)的代碼示例,需要的朋友可以參考下2023-07-07
vite+ts vite.config.ts使用path報(bào)錯(cuò)問(wèn)題及解決
這篇文章主要介紹了vite+ts vite.config.ts使用path報(bào)錯(cuò)問(wèn)題及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-10-10
Vue3如何自定義指令directive(如權(quán)限控制)
本文詳細(xì)介紹了如何在Vue3項(xiàng)目中創(chuàng)建自定義指令directive1,首先,在src/directives/index.ts文件中引入自定義指令,然后,創(chuàng)建src/directives/permission.ts文件來(lái)定義具體指令邏輯,在main.ts文件中引入并注冊(cè)該指令,最后,在頁(yè)面中使用自定義指令2024-12-12
淺談vue項(xiàng)目利用Hbuilder打包成APP流程,以及遇到的坑
這篇文章主要介紹了淺談vue項(xiàng)目利用Hbuilder打包成APP流程,以及遇到的坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09
element-ui和vue表單(對(duì)話框)驗(yàn)證提示語(yǔ)(殘留)清除操作
這篇文章主要介紹了element-ui和vue表單(對(duì)話框)驗(yàn)證提示語(yǔ)(殘留)清除操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09

