目中經常會出現點擊跳轉錨點的方法,比如給一個a標簽一個href=“#錨點”,然后要跳的錨點給個id=“錨點”,這樣就實現簡單的跳轉,但是這樣在url地址欄后面都會出現一個諸如www.csdn.net#錨點,然后你點擊給一次后退都是退回上一個選擇的錨點url,這里總結一些跳轉錨點的方法。
<!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">to div1</a>
<a href="#div2">to div2</a>
<a href="#div3">to div3</a>
</h2>
<div id="div1">div1</div>
<div id="div2">div2</div>
<div id="div3">div3</div>
</body>
</html>
這種方法的缺點是點擊錨點之后,瀏覽器的URL會發生變化,如果刷新可能會出現問題。
<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
$(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;
});
});
</script>
注意:運行上面的腳本的之前,先將為錨點增加相應的id,同時去掉href屬性。
$("html, body")可以替換為響應的div,如果不起作用,試著給該div增加overflow:scroll屬性。
另外,腳本可以進一步優化,自己來試試
這樣做的好處是:URL地址不會變,同時點擊錨點時會自動響應scroll事件,不需要重新綁定。
缺點是:如果頁面復雜的話,偏移值可能會發生變化需要算法輔助。
document.getElementById("divId").scrollIntoView();
比如:
document.querySelector("#roll1").onclick = function(){
document.querySelector("#roll1_top").scrollIntoView(true);
}
這里就是點擊id是#roll1的元素可以滾動到id是#roll1_top的地方,這里的#roll1和#roll1_top最好是一一對應的,
這種方法的好處,是URL不會變,同時能夠響應相應的scroll事件,不需要算法什么的。代碼如下:
<html>
<head>
<title>HTML5_ScrollInToView方法</title>
<meta charset="utf-8">
<script type="text/javascript">
window.onload = function(){
/*
如果滾動頁面也是DOM沒有解決的一個問題。為了解決這個問題,瀏覽器實現了一下方法,
以方便開發人員如何更好的控制頁面的滾動。在各種專有方法中,HTML5選擇了scrollIntoView()
作為標準方法。
scrollIntoView()可以在所有的HTML元素上調用,通過滾動瀏覽器窗口或某個容器元素,
調用元素就可以出現在視窗中。如果給該方法傳入true作為參數,或者不傳入任何參數,那么
窗口滾動之后會讓調動元素頂部和視窗頂部盡可能齊平。如果傳入false作為參數,調用元素
會盡可能全部出現在視口中(可能的話,調用元素的底部會與視口的頂部齊平。)不過頂部
不一定齊平,例如:
//讓元素可見
document.forms[0].scrollIntoView();
當頁面發生變化時,一般會用這個方法來吸引用戶注意力。實際上,為某個元素設置焦點也
會導致瀏覽器滾動顯示獲得焦點的元素。
支持該方法的瀏覽器有 IE、Firefox、Safari和Opera。
*/
document.querySelector("#roll1").onclick = function(){
document.querySelector("#roll_top").scrollIntoView(false);
}
document.querySelector("#roll2").onclick = function(){
document.querySelector("#roll_top").scrollIntoView(true);
}
}
</script>
<style type="text/css">
#myDiv{
height:900px;
background-color:gray;
}
#roll_top{
height:900px;
background-color:green;
color:#FFF;
font-size:50px;
position:relative;
}
#bottom{
position:absolute;
display:block;
left;0;bottom:0;
}
</style>
</head>
<body>
<button id="roll1">scrollIntoView(false)</button>
<button id="roll2">scrollIntoView(true)</button>
<div id="myDiv"></div>
<div id="roll_top">
scrollIntoView(ture)元素上邊框與視窗頂部齊平
<span id="bottom">scrollIntoView(false)元素下邊框與視窗底部齊平</span>
</div>
</body>
</html>
個人建議使用第四種方法。
起html的錨點這個概念,你可能會感到會陌生,感覺自己沒有聽過。但是如果說起它的作用,你可能就恍然大悟了,就像你說起一個演員,可能不知道是誰,但是說起它演的一個角色可能立馬就知道那個人是誰了。
那么,什么是錨點呢?
錨點存在于html中,在默認情況下,可以快速的定位到指定元素,并將元素置于頁面最頂端。當然我們可以按照自己的需求來確定錨點的位置,不一定要讓其定位在頂部。現如今有無數多的頁面已經用上了錨點,比如Vue.js的官網,在我們點擊標題“Vue.js是什么”和標題“起步”的時候,標題都會自動移到頁面頂端。
錨點的使用
那接下來,我們就來看看幾種錨點的使用方法。
id定位
最基本的使用方法如下,當點擊<a>標簽時,頁面會相應的將該div內容置頂
錨點的id定位方法
name定位
除了id,還可以通過name進行定位,不過需要主要的是,如果采用name屬性進行定位的話,只適用于a標簽,類似于p標簽等都不支持。
錨點的name定位方法
javascript代碼進行定位
在原生的javascript中,有一個scrollIntoView()方法,可以實現頁面的錨點
javascript方法實現錨點
一個綜合的例子
講了三種實現方法后,接下來看一個實際運用的例子。首先是實際效果圖,在點擊左側欄時,頁面右邊會相應的顯示指定段落的內容
錨點的實際使用
首先看下html頁面的內容,左側的ul代碼
左側的ul代碼
右側的內容部分代碼
右側內容部分代碼
css部分的代碼
css部分的代碼
將上述的代碼寫在一個html文件中,便可實現左側欄點擊,右側欄顯示相應內容的效果。
特殊情況
在實際項目中,我們總會遇到這樣一種情況,在頁面頂部有固定頭內容的時候,如果直接使用上述方法,會得不到想要的效果
直接使用錨點的效果圖
通過該圖可以看出,第三段內容的標題被遮住了,實際應該往下再顯示一點
那么,我們該怎么解決這個問題呢?在這里我想到了兩種方法,第一種是在每個內容div上加一個隱藏的p元素,給p元素一個定高,再向上偏移,這種方法會導致頁面出現很多個多余的p元素,不推薦使用。
第二種是利用偽元素,偽元素可以占用實際的高度,這是推薦使用的方法
偽元素的樣式
通過給h3標簽添加偽元素樣式,可完美解決這個問題,效果圖如下
使用偽元素后的效果圖
總結
今天的內容你會了么?如果還沒有掌握的話,可以按照文章中的代碼,進行實踐,代碼總是要多敲才更容易理解。
如果喜歡的話,記得關注小編噢,小編后續會堅持出更多技術性的文章,如果有任何問題,也歡迎提問,小編都會盡力解答的。
輯導語:在上下滾動頁面時,除了出現吸頂,還會出現吸底、錨點等情況,那么這些都是在滾動頁面時需要注意的控件。本文作者結合最近工作中的實際項目,對于滑動時的吸頂、錨點規則方式的總結心得,一起來學習下吧。
上下滾動頁面時,除了出現吸頂,還會出現吸底、錨點等情況,這些都是在滾動頁面時需要注意的控件。
結合最近工作中的實際項目,Cassie將滑動用到的場景進行了提煉,總結出這份控件設計規范,一起來學習吸底、錨點是如何在APP以及PC端應用的吧~
PC端及移動端的底部有一些操作欄,比如表單的填寫操作或者支付按鈕的放置,移動端底部還會有全局的導航欄,這些會占用一定的空間,可以根據使用場景靈活選擇吸底方式。
需要注意吸底的是具有操作價值的內容,吸底元素包括操作按鈕、 引導操作、移動端的導航欄…
PC端在表單內容較多、查看內容文章、需要引導用戶操作比如支付等場景下,當用戶需滑動查看更多內容,可將操作類按鈕吸底,需要吸底的內容可以根據布局調整顯示。
在左圖PC端釘釘郵箱中,屬于編輯表單類的,將發送操作按鈕固定吸底,用戶只需要修改部分字段,更利于快速完成編輯;在PC端簡書中,屬于內容展示類的,出于增強互動的目的,將評論、點贊等操作固定在底部增加其操作便捷性。
考試星PC端采用左中右布局,將提交考試放在右側底部,可以不占用考試內容高度空間;百度學術PC端采用左右布局,右側是一些介紹內容,所以操作按鈕固定在和之有直接關系的左側內容底部。
移動端底部常會有一些吸底的控件,比如底部導航欄、主操作按鈕、需要引導或便捷用戶操作的控件等。
一級頁面導航固定在底部,當該頁面有主按鈕,比如結算等則將該欄放到導航欄上面,如果還有引導類或便捷操作類控件則再放到主操作欄上面。
移動端,特別是購物車場景存在多條吸底內容。
具有引導性的操作,為了配合主操作而出現,也是固定在底部,但位于底部操作上面,在特定場景下出現。
比如閑魚提供了一些常用問題,可以跟賣家交流更便捷;考拉海購購物車的優惠引導也是固定在底部,類似的還有京東、淘寶等購物車。
當PC端展示內容分多段,且其中有需要引導用戶操作的按鈕,建議在滾動到該段時將該操作按鈕吸底,滾動到另外一段內容后再取消吸底。
考拉海購PC端的購物車頁面,如果購物車內容比較多,支付欄是吸底的,向上滾動到購物車商品內容結束后,支付欄不吸底,下面展示推薦商品。
京東官網的購物車也是這種方式,但移動端主流購物車的支付都是固定在底部的。
吸底內容可以根據具體情況顯示或隱藏,這種非固定的方式常用于移動端閱讀及查看話題評論時。
在微信讀書的閱讀狀態時,為了給讀者提供沉浸式體驗,隱藏操作欄,上滑時再顯示;在知乎熱榜瀏覽主題內容時,主操作欄跟在內容下面,當頁面滑動后主操作欄改變布局樣式吸底展示。
錨點以回到頂部也屬于頁面滾動時需要的控件,配合滾動條用于跳轉到頁面指定位置。
PC端和移動端都可以在內容過多時使用回到頂部控件,PC端的錨點定位類似導航一樣可以放到頁面左側或者右側,但其實只是頁面的內容定位。
移動端可以利用滾動條做時間軸類型的定位或者分頁定位。
當PC端頁面內容區域比較長時比如瀑布流的使用,用戶需要頻繁返回頂部查看相關內容時,可以滾動后出現回到頂部控件。
花瓣PC端頁面滾動后,右下角有一些功能操作,滾動后出現回到頂部控件。
當頁面內容區域比較長時;當用戶需要頻繁返回頂部查看相關內容時,可以使用回到頂端返回頁面頂部。
如果當前頁面是主頁,可以滾動后主頁按鈕便成回到頂部按鈕,這樣可以避免遮擋內容,優化閱讀體驗。
京東購物車頁面除了展示添加到購物車的商品外,底部還有推薦上面,滾動后出現回到頂部控件;每日優鮮APP頁面滾動后,導航的主頁按鈕變成回到頂部按鈕,優化體驗,類似的還有淘寶、餓了么、考拉等主頁有瀑布流的內容。
當PC端有多條組合內容時,可以左側做一個錨點定位配合滾動條快速定位到頁面需要查看的內容。
當PC端使用上下布局時,且內容區域居中固定時,錨點懸浮在左側顯示,當屏幕小于一定尺寸時,錨點縮小懸浮于頁面左側,鼠標移入時再顯示。
在優設的網址導航中,由于導航分為多個類型,所以將具體類型名稱放到左側展示,能快速定位到需要的內容。
當PC端左側有導航,錨點定位可以放到右側,常用于閱讀文章等場景。
在Ant design的組件頁,由于左側有二級導航,所以將頁面的錨點定位放在右側,類似的還有語雀文章閱讀。
當有時間類型的內容比如瀏覽照片時,可以采取時間軸定位的方式快速滑動到需要查看的內容。
內容過多的情況下也可以采取分頁的形式,滾動后將分頁及回到頂部固定在底部右下角位置。
例如寶寶樹APP采用時間軸的方式快速定位,默認狀態定位控件縮小固定在右側,滑動時控件變大顯示具體時間,方便用戶按時間快速查找照片,類似的還有百度網盤里的照片瀏覽。
豆瓣APP在電影的討論模塊,選擇一個討論查看詳情滾動后底部顯示回復的定位錨點,控件放在操作欄上面吸底展示。
作者: Cassie
原文鏈接:www.zcool.com.cn/article/ZMTM0ODkzMg==.html
本文由 @ Cassie 授權發布于人人都是產品經理,未經作者許可,禁止轉載。
題圖來自Unsplash,基于CC0協議。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。