【发布时间】:2016-12-22 00:29:08
【问题描述】:
我试图弄清楚当您的鼠标进入文档底部时Medium 是如何让他们的底部操作/菜单栏向上滑动的。将鼠标移到不可见的 div 上不会触发上滑效果(它通过变换 translateY 上下滑动)。
此外,菜单栏的高度只有 44 像素,但它的 is-visible 类在你的鼠标靠近它之前就被触发了——但是通过什么?使用 Inspect Element 时,我看不到任何可能触发它的隐藏 div..
我已经搜索了无数种方法,例如“当鼠标进入文档的特定部分时显示元素”但所有搜索结果都涉及鼠标进入或移动到 div 元素时,这不是我正在寻找的解决方案。
显然,您可以通过像我在这里所做的那样将上滑菜单放在隐藏容器中来解决这个问题,然后您会得到想要的结果:
(function() {
var actionBar = document.querySelector('.action-bar');
var actionBarWrapper = document.querySelector('.action-bar-detection');
function showDiv() {
actionBar.classList.add('js-is-visible')
}
function hideDiv() {
actionBar.classList.remove('js-is-visible')
}
actionBarWrapper.onmouseover = showDiv;
actionBarWrapper.onmouseout = hideDiv;
})();
* {
margin: 0;
padding: 0;
box-sizing: border-box;
line-height: 1.5;
}
body {
height: 100%;
}
.wrapper {
width: 90%;
max-width: 600px;
margin: 5% auto;
}
.action-bar {
position: absolute;
left: 0;
bottom: 0;
border: 1px solid #252321;
background: #fff;
padding: 16px;
width: 100%;
min-height: 50px;
opacity: 0;
transform: translateY(100%);
transition: all .5s;
z-index: 99;
}
.action-bar-detection {
height: 150px;
width: 100%;
opacity: 1;
position: fixed;
bottom: 0;
left: 0;
z-index: 1;
}
.js-is-visible {
opacity: 1;
transform: translateY(0%);
}
<html>
<head>
<meta charset="UTF-8" />
<title>Document</title>
</head>
<body>
<div class="wrapper">
<p>When mouse enters the hidden action bar element, slides up.</p>
<p>But it's only happening because the action-bar is inside an invisible detection layer class (action-bar-detection) with a height of 150px.</p>
</div>
<div class="action-bar-detection">
<div class="action-bar">
Bottom Menu
</div>
</div>
</body>
</html>
但是,这似乎不是 Medium 所做的,如果可以在不添加更多 HTML 和 CSS 的情况下做到这一点,我想学习如何! :-)
我认为我没有正确地表达问题,因为我找不到任何解决方案,即使是远程关闭(我已经搜索了很多)。
有什么建议吗?我应该读什么? :-)
【问题讨论】:
标签: javascript