点击定位到某条数据过程中遇到的问题解析

715 阅读2分钟

问题1:使用scrollIntoView和scrollTo去设置定位

问题:使用scrollIntoView方法将数据滚动到页面底部,可能存在兼容性问题

1.在安卓手机上,scrollIntoView方法时,可能会存在点击穿透的问题,当元素滚动到指定的位置后,原本的点击事件仍然会触发,会导致意外结果 2.在ios上,功能基本上可以实现,但是平滑的滚动效果可能无法正常工作,可以到指定位置,但无法提供预期的滚动效果

解决方案:1.使用scrollTo来实现,通过计算位置,来滚动定位,当高度不足时,scrollInto会滚动到,滚动内容的底部

问题2:获取点击元素的方式

解决方案:1.通过点击获取当前点击的索引,通过索引获取元素
点击操作时,记录当前点击的索引index,返回列表通过索引寻找点击元素
let getClickItem = document.querySelectorAll('.itemClass')[index] 2.通过元素属性获取当前元素 在html循环生成dom时,给每一个item添加一个唯一的标识idflag=‘’ 在点击跳转时记录点前点击元素的id, let getClickItem = document.querySelectorAll([idflag='${id}'])

注意: 1.可以将document换成this.$el,好处将查找属性[idflag='${id}']的范围锁定到当前vue,减少html中存在属性重复,导致的获取元素不准确的情况 2.使用属性选择器,并且属性值为变量时,就得加‘’

问题3:关于获取高度offsetTop的知识点

offsetTop是计算当前盒子距离offsetParent顶部的距离

image.png 学到知识点:关于定位父级offsetParent的定义
定位父级offsetParent的定义:与当前元素最近的经过定位(position值不为static)的父级元素
情况1:元素自身有fixed定位,offsetParent值为null,注意:火狐浏览器有兼容性问题

<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>offsetParent</title>
    <style>
        .off {
            position: fixed;
            top: 70px;
            left: 70px;
            border: 1px solid rgb(255, 204, 0);
        }
    </style>
</head>

<body>
    <div class="par">
        <button class="off">我想找一下他的父级盒子</button>
    </div>
</body>
<script>
    let a = document.querySelector('.off')
    function clickTrad() {
        console.log(a.offsetParent)
    }
    a.addEventListener('click', function () {
        clickTrad()
    })
</script>

</html>

image.png 情况2:元素自身无fixed定位,并且父级都没有经过定位,offsetParent为body

<style>
    .off {
        border: 1px solid rgb(255, 204, 0);
    }
</style>
<body>
    <div class="par">
        <button class="off">我想找一下他的父级盒子</button>
    </div>
</body>
<script>
    let a = document.querySelector('.off')
    function clickTrad() {
        console.log(a.offsetParent)
    }
    a.addEventListener('click', function () {
        clickTrad()
    })
</script>

</html>

image.png 情况3:元素自身无fixed定位,且父级元素存在经过定位的元素,offsetParent的结果为离自身元素最近的经过定位的父级元素

        .par {
            position: fixed;
            top: 70px;
            left: 70px;
            height: 100px;
            border: 1px solid rgb(255, 204, 0);
        }
    </style>
</head>

<body>
    <div class="par">
        <button class="off">我想找一下他的父级盒子</button>
    </div>
</body>
<script>
    let a = document.querySelector('.off')
    function clickTrad() {
        console.log(a.offsetParent)
    }
    a.addEventListener('click', function () {
        clickTrad()
    })
</script>

</html>

image.png 情况4:body元素的parentNode是null

console.log(document.body.offsetParent);

image.png

参考地址:www.cnblogs.com/xiaohuochai…