css - 下面溢出滚动div

标签 css html

我正在使用位于另一个 div 之上的 div。当我滚动位于另一个上方的 div 并到达底部时,它会滚动整个主体。这很难解释,所以我做了一个 fiddle 来演示效果:http://jsfiddle.net/2Ydr4/

HTML:

<div class="body">
    <div class="above">
       <!-- Content in here that is longer than the height -->
    </div>
</div>

CSS:

.above {
    width: 300px;
    height: 200px;
    overflow-y: scroll;
    background: red;
    z-index: 10;
    position: fixed;
}

我的问题是:当 float 的 div 滚动到底部或顶部时,如何防止主体滚动?我敢肯定这是很明显的,我错过了。谢谢!

编辑:我可能应该提到它的目标设备是 iPad。我尝试按照下面的建议有条件地添加 body {overflow: hidden},虽然这解决了桌面浏览器上的问题,但它似乎仍然存在于基于触摸的浏览器上。

最佳答案

桌面

这就是滚动的工作原理。您需要做的是暂时或通过用户操作删除正文的滚动属性。

例如,当用户将鼠标悬停在 float 的 div 上时,您可以使用...禁用主体的滚动

body{overflow:hidden}

然后当您将鼠标悬停在 float div 上时使用.. 重新启用它

body{overflow:auto}

移动

在移动设备上,您需要使用触摸事件。我没有尝试过,但理论上这应该可行。

var $body = document.querySelector('.body'),
    $above = document.querySelector('.above');

$above.addEventListener('ontouchstart', onAboveStart, false);
$body.addEventListener('ontouchstart', onBodyStart, false);


function onAboveStart()
{
        $body.addEventListener('ontouchmove', function(e) {e.preventDefault()}, false);
}

function onBodyStart()
{
        $body.removeEventListener('ontouchmove', function(e) {e.preventDefault()});
}

关于css - 下面溢出滚动div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20601006/

相关文章:

html - 我怎样才能为 IE 提供特殊的 CSS?

css 括号 - 间距问题

javascript - 使用隐藏 div 的 jquery 查找最近的视频标签 id

javascript - 使用按钮调用基本 HTML 函数

jquery - 完整背景上的 CSS3 渐变

html - 使 Bootstrap 下拉菜单更大

javascript - 在浏览器窗口调整大小时切换滑出可见性

javascript - jQuery 验证 select2

javascript - 为什么我的 angularJS 路由不起作用,chrome'error [$injector :unpr] Unknown provider

javascript - HTML5 Canvas - 以特定 Angular 在圆内绘制一条线