scrollIntoView实现简单的锚点定位(示例:选择城市列表)

一、介绍

scrollIntoView()方法利用滚动原理,来将相应的元素滚动到可是区域内。

首先需要说明的是,这个方法并没有写入标准,但是大多数主流浏览器已经支持或部分支持其功能了,所以可以放心使用,当然如果有朝一日标准出来了,那就按标准来吧。

其次要说明的是,这是js原生方法,jquery等框架是使用不了的,所以,获得元素的方法一定是document.getElementById或querySelector,然后才可以点出来scrollIntoView()方法。

1.简介

scrollIntoView()方法将调用它的元素滚动到浏览器窗口的可见区域

2.语法

element.scrollIntoView(); // 等同于element.scrollIntoView(true)
element.scrollIntoView(alignToTop); //布尔参数
element.scrollIntoView(scrollIntoViewOptions); //对象参数

语法参数
在这里插入图片描述

3.示例

var element = document.getElementById("box"); 
element.scrollIntoView();
element.scrollIntoView(false);
element.scrollIntoView({
   block: "end"});
element.scrollIntoView({
   behavior: "instant", block: "end", inline: "nearest"});

注意: 取决于其它元素的布局情况,此元素可能不会完全滚动到顶端或底端。

4.浏览器兼容性

在这里插入图片描述

2.实例应用

以“城市选择列表”为例,点击右侧 A,B,C,…首字母,对应的城市列表 定位到顶部

2.1 html5代码实现

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="keywords" content="jQuery" />
<meta name="description" content="演示XHTML、CSS、jquery、PHP案例和示例" />
<title>移动端按首字母检索城市列表</title>
<style type="text/css">
  body {
   
    -webkit-text-size-adjust: none;
    -webkit-tap-highlight-color: rgba(0, 0, 0, 0);
    background: #fff;
    font-size: 14px;
  }
  #shortcut {
   
      position: fixed;
      right: 0;
      font-family: Helvetica;
      top: 100px;
  }
  #shortcut .item {
   
      height: 12px;
      padding-top: 4px;
      padding-left: 24px;
      text-align: center;
      font-size: 12px;
      color: #fa8919;
  }
  ul{
   
    padding-inline-start: unset;
  }
  li {
   
      list-style: none;
  }
  .title{
   
    height: 28px;
    padding-left: 16px;
    line-height: 28px;
    background-color: #f5f5f5;
    font-family: Helvetica;
    font-size: 12px;
    color: #878787;
  }
  .cityItem {
   
      height: 44px;
      padding: 0 16px;
      line-height: 44px;
      font-size: 16px;
  }
  .cityItem .name {
   
      display: block;
      position: relative;
  }
  .cityItem .name:before,
  .cityItem .name:after {
   
      display: block;
      position: absolute;
      border-top: 1px solid #e5e5e5;
      left: 0;
      width: 100%;
      content: ' ';
  }
  .cityItem .name:before {
   
      display: none;
      top: 0;
  }
  .cityItem .name:after {
   
      display: block;
      bottom: 0;
  }
  .cityItem:active {
   
      background-color: #f0f0f0;
  }
  .cityItem:last-child .name:after {
   
      display: none;
  }
</style>
</head>

<body>
<div class="city">
  <div calss="cities-hook" id="cities">

  </div>
  <div calss="shortcut" id="shortcut">

  </div>
  
</div>   
<script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
<script src="js/city.js"></script>
<script>
var cities = document.getElementById('#cities');
var shortcut = document.getElementById('#shortcut');
function initCities() {
   
    console.log(cityData)
    var lists="";
    var en = '<ul>';
    cityData.forEach(function (group) {
   
      var name = group.name;
      lists += '<div class="title" id="title'+group.name.substr(0, 1)+'">'+name+'</div>'; 
      lists += '<ul style="margin-right: 6px;">';
        group.cities.forEach(function(g) {
   
          lists += '<li class="cityItem" data-name="'+ g.name +'" data-id="'+ g.cityid +'"><span class="border-1px name">'+ g.name +'</span></li>';
        });
      lists += '</ul>';

      var name = group.name.substr(0, 1);
      en += '<li data-anchor="'+name+'" class="item">'+name+'</li>';
    })
    en += '</ul>';
    $("#cities").html(lists);
    $("#shortcut").html(en);
}

initCities();

$('.item').on('click', function(){
   
    var val = $(this).attr('data-anchor');
    //对应的模块 置顶
    var curId="title"+val
    window.document.getElementById(curId).scrollIntoView();
   
});

</script>
</body>
</html>

2.2 城市json数据

city.js:

var cityData=[{
   name:"★热门城市",cities:[{
   name:"北京市",tags:"BEIJING,北京市",cityid:1},{
   name:"上海市",tags:"SHANGHAI,上海市",cityid:4},{
   name:"深圳市",tags:"SHENZHEN,深圳市",cityid:2},{
   name:"广州市",tags:"GUANGZHOU,广州市",cityid:3},{
   name:"武汉市",tags:"WUHAN,武汉市",cityid:6}]},{
   name:"A",cities:[{
   name:"鞍山市",tags:"ANSHAN,鞍山市",cityid:64},{
   name:"安庆市",tags:"ANQING,安庆市",cityid:149},{
   name:"安阳市",tags:"ANYANG,安阳市",cityid:174},{
   name:"阿拉善盟",tags:"ALASHANMENG,阿拉善盟",cityid:202},{
   name:"阿坝州",tags:"ABAZHOU,阿坝州",cityid:290},{
   name:"安顺市",tags:"ANSHUN,安顺市",cityid:294},{
   name:"阿里地区",tags:"ALIDIQU,阿里地区",cityid:316},{
   name:"安康市",tags:"ANKANG,安康市",cityid:320},{
   name:"阿克苏地区",tags:"AKESUDIQU,阿克苏地区",cityid:348},{
   name:"阿勒泰地区",tags:"ALETAIDIQU,阿勒泰地区",cityid:355},{
   name:"阿拉尔市",tags:"ALAER,阿拉尔市",cityid:356}]},{
   name:"B",cities:[{
   name:"北京市",tags:"BEIJING,北京市",cityid:1},{
   name:"保定市",tags:"BAODING,保定市",cityid:62},{
   name:"包头市",tags:"BAOTOU,包头市",cityid:63},{
   name:"本溪市",tags:"BENXI,本溪市",cityid:77},{
   name:"蚌埠市",tags:"BANGBU,蚌埠市",cityid:100},{
   name:"北海市",tags:"BEIHAI,北海市",cityid:161},{
   name:"滨州市",tags:"BINZHOU,滨州市",cityid:166},{
   name:"宝鸡市",tags:"BAOJI,宝鸡市",cityid:170},{
   name:"亳州市",tags:"BOZHOU,亳州市",cityid:189},{
   name:"巴彦淖尔市",tags:"BAYANNAOER,巴彦淖尔市",cityid:199},{
   name:"白山市",tags:"BAISHAN,白山市",cityid:208},{
   name:"白城市",tags:"BAICHENG,白城市",cityid:210},{
   name:"百色市",tags:"BAISE,百色市
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值