zoukankan      html  css  js  c++  java
  • 移动端触摸右侧菜单栏,页面内容对应项滚动到最上方

    vue项目练习中,遇到的一个计算问题,来记录一下~~~

    想要实现的效果就是触摸字母列表时,页面中与之对应城市的首字母区块滑动到最顶端

    明确目的就是需要计算出当前触摸的字母对应的index值 求出index值与页面中内容一 一对应

    我的思路是 求出当前字母距离字母表最顶端(A顶端)总距离  总距离 / 一个字母元素的高度  就会得到当前字母从顶端到底端的 index范围 

                       当然需要向下取整以保证触摸一个字母 从顶端到底端 对应的是该字母的index

    如上图  假设我要求出D字母在字母表中对应的index值,

        首先要计算 首字母A的offsetTop

               然后计算D.clientY-topHeight (头部高度)  可理解为D的offsetTop

               D-A就是从D顶端到A顶端的总高度  总高度client范围值/一个元素的高度 向下取整就是D对应的index值了  

    整体思路代码如下

      const aLi=获得的字母列表dom元素

      const oneHeight = 一个字母元素的高度

      const touchStatus=false; 

      for(let i =0;i<aLi.length;i++){

        aLi[i].ontouchstart=function(){

          touchStatus=true

        }

        

        aLi[i].ontouchmove=function(e){

          if(touchStatus=true){

            //计算A的offsetTop

              const startY = aLi[1].offsetTop

            //计算当前触摸字母距离顶端的距离-topheigt (可理解成当前字母的offsetTop)

              const touchY= e.touchs[0].clientY-topheigt

            //距离的差值 也就是当前触摸字母距离首字母A顶端的  总高度 / 一个字母的高度 再向下取整 得到的就是当前触摸字母的范围对应的index值啦

              const index= Math.floor( (touchY-startY) /  oneHeight)

            //这里暂时用js实现一下城市展示内容区域滚动到最上方   假设aDiv就是获取的内容列表的dom元素

              document.body.scrollTop = aDiv[index].offsetTop

          }

        }

      

        aLi[i].ontouchend=function(){

          touchStatus=false

        }

       }

       

    页面内容滚动实现方法有多种, 这里主要是记录一下当前touch元素对应的index值的计算方法。

            

  • 相关阅读:
    A.3.1. 与MySQL客户端库的链接问题
    c++ mysqlclient library linkage problem Stack Overflow
    找房 爱合住, ihezhu.com
    21.4.5.1. MySQL Connector/C++ Connecting to MySQL
    如何对链接了mysqlclient的程序静态编译?
    分享:[组图] 科技圈最具权势 25 大女工程师
    linux 静态链接 mysql glibc 库的悲催过程 mango的日志 网易博客
    /usr/bin/ld: cannot find lgcc_s 问题解决小记
    « 静态编译的MySQL易挂起 »
    SQL C++代码自动生成器(sql2class)介绍 Newzai的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/shimeng123/p/11690455.html
Copyright © 2011-2022 走看看