地址,通讯录索引选择器

2021-02-23  本文已影响0人  变量只提升声明不提升赋值
image.png

如图,想要实现这种效果。在小程序中实现还是比较简单的。只需要遍历一下元素,利用小程序的scroll-view组件就可以实现。scroll-into-view属性绑定到对应的索引,点击索引就会自动滑动到相应的内容去。

下面讲一下原生如何实现

首先要实现这种效果,肯定是从索引下手。点击索引C就跳转到C内容的位置,那数据结构大概可以这么制定

[
      {
        letter: 'A',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
 {
        letter: 'B',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
 {
        letter: 'C',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
]

类似于这种。关键实现就在索引这个字段上。

先遍历出内容来,看看页面效果

    $.each(list, function (index, item) {
      let html = '<h1 class="item_letter">' + item.letter + '</h1><div>' + item.text + '</div>'
      let html2 = '<div  class="letter">' + item.letter + '</div>'
      $('.left').append(html)
      $('.right').append(html2)
    })
image.png

样式什么的这里就不写了,主要讲一下效果的实现。

首先可以想到的是,要滚动到相应的索引位置。肯定是去设置滚动条的位置了,并且滚动条的位置也肯定是根据左边的内容距离窗口顶部的距离。例如点击了D索引,那滚动条就要滚动到D内容所在的位置。

    $('.right div').each(function (index) {   //先给右边的索引动态绑定一下点击事件
      $(this).on('click', function (e) {
        let thisText = $(this).text()   //这里拿到当前点击的索引的文本值。
        console.log($(this).text())
        console.log($(this).offset().top) //获取某个元素距离顶端的位置
        $('.left h1').each(function (index, item) {  //遍历左边的内容,找到和点击的索引相对应的那一块内容
          if ($(item).text() == thisText) {   
            console.log($(item).text(), $(item).offset().top)
            $(document).scrollTop($(item).offset().top)    //设置内荣距离顶部的位置给滚动条。
          }
        })
      })
    })

具体效果可自行测试,完整代码如下

<!DOCTYPE html>
<html>

<head>
  <script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
  <title>
    索引选择器
  </title>
  <style>
    .right {
      position: fixed;
      left: 1000px;
      top: 0px
    }

    .right div {
      cursor: pointer;
      padding: 5px 0;
    }
  </style>
</head>

<body>
  <div>
    <div class="left">
      <div class="left_item">
      </div>
    </div>
    <div class="right" onclick="">
    </div>
  </div>
</body>
<script>
  $(function () {
    let list = [{
        letter: 'A',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'B',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'C',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'D',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'E',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'F',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'G',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'H',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'I',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'J',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'K',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'L',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'M',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'N',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'O',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'P',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'Q',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'R',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'S',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'T',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'U',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'V',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'W',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'X',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'Y',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
      {
        letter: 'Z',
        text: 'hahahahhahahahahahahahahahahahahahahahahahahhahaha'
      },
    ]
    $.each(list, function (index, item) {
      let html = '<h1 class="item_letter">' + item.letter + '</h1><div>' + item.text + '</div>'
      let html2 = '<div  class="letter">' + item.letter + '</div>'
      $('.left').append(html)
      $('.right').append(html2)
    })
    $('.right div').each(function (index) {
      $(this).on('click', function (e) {
        let thisText = $(this).text()
        console.log($(this).text())
        console.log($(this).offset().top) //获取某个元素距离顶端的位置
        $('.left h1').each(function (index, item) {
          if ($(item).text() == thisText) {
            console.log($(item).text(), $(item).offset().top)
            $(document).scrollTop($(item).offset().top)
          }
        })
      })
    })
  })
</script>

</html>
上一篇下一篇

猜你喜欢

热点阅读