【Web前端问题】页面滚动,菜单栏悬停怎么实现?

如图

clipboard.png

当往上滚动,菜单栏滚动到顶部的位置时,再继续滚动,悬停在顶部。
问:
1、Vue是否有提供这样的控件?
2、如果vue没有,有什么现成的一些轮子吗?(最好兼容性好一点,webapp)
3、如果现成的轮子也没有,怎么实现?

如上,有没有大佬解答下,不胜感激

按照 @游龙翔隼的思路已解决,贴上代码:

<!DOCTYPE html>

<html lang="en">

<head>

<title></title>

<meta charset="UTF-8">

<meta name="viewport" content="width=device-width, initial-scale=1">

<link href="css/style.css" rel="stylesheet">

</head>

<body>

<div style="overflow:scroll">

<div style="width: 100%;height:100px;background:red;margin-bottom:10px"></div>

<div id="bar" style="width:100%;height:20px;background:black"></div>

<div style="width: 100%;height:1500px;background:red;margin-top:10px"></div>

</div>

</body>

<script>

var barOffSetTop = document.getElementById('bar').offsetTop;

window.addEventListener('scroll', (e) => {

if(barOffSetTop < document.body.scrollTop){

bar.classList.add('add-fixed')

}else{

bar.classList.remove('add-fixed')

}

});

</script>

</html>

<style>

.add-fixed{

position: fixed;

top: 0;

}

</style>

注意:菜单栏的offsetTop不能动态取,不然置顶后offsetTop的值就改变了,滑动回来的时候,菜单栏无法复位。

回答:

position: sticky

用sticky定位就行了,具体看 这里 注:目前兼容性较差

之前也做过类似的东西,实现比较简单,来说下思路:
1.监听滚动事件
2.判断菜单dom是否超出视窗
3.超出后使用绝对定位,你这里应该用fixed吧,固定在顶部

回答:

需要监听滚动,当滚动到你想要的位置时,把那个需要固定的元素dom拷贝一份出来,然后fixed,此时需要把之前那个dom隐藏起来(visibiliy:hidden);依次判断,当滚动到需要位置时,再把这个copy的dom隐藏起来,把之前的显示出来。。。

回答:

代码仅供参考

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>Insert title here</title>

<style type="text/css">

div{width:800px;}

#head{height:200px; background:#CC6699; z-index:1; position:absolute;}

#body{background:#FFCC99; height:500px; padding-top:200px;}

#foot{height:500px; background:#CCFFFF;}

</style>

</head>

<body>

<div id="head">head</div>

<div id="body">body</div>

<div id="foot">foot</div>

</body>

</html>

<script type="text/javascript">

var head = document.getElementById("head");

var bodyHeight = document.getElementById("body").offsetHeight;

var foot = document.getElementById("foot");

var footHeight = foot.offsetHeight;

window.onscroll = function() {

var t = document.documentElement.scrollTop || document.body.scrollTop;

if (t < 150) return; // 150 自行修改,就是你说的 offsetTop 吧(?)

if (t > 150 && t < (bodyHeight - window.innerHeight + 160)) { // 160 是我自己的另一个数值,无视即可

head.style.top = t - 150;

}

}

</script>

回答:

fixed 在ios 端 兼容性很差 楼主怎么整的

以上是 【Web前端问题】页面滚动,菜单栏悬停怎么实现? 的全部内容, 来源链接: utcz.com/a/135650.html

回到顶部