Javascript 如何在移动浏览器中垂直固定元素,但仍允许水平滚动?

Javascript 如何在移动浏览器中垂直固定元素,但仍允许水平滚动?,javascript,mobile,Javascript,Mobile,在桌面浏览器上,我可以使用以下javascript垂直修复元素,但仍然允许水平滚动。如您所见,它会在每个滚动事件上重新定位元素。要了解我的意思,请尝试在此处水平和垂直滚动 然而,对于移动浏览器来说,这种逻辑是失败的,因为移动浏览器显然要等到整个拖动完成后才会绘制,从而导致不稳定的体验 垂直固定元素但仍允许移动浏览器水平滚动的好方法是什么?如果您使用设置为高度:100%的容器框,并将html和主体元素的高度设置为100%,则可以使用位置:绝对;排名:0用于固定标题,并为要垂直滚动的框设置溢出:自动

在桌面浏览器上,我可以使用以下javascript垂直修复元素,但仍然允许水平滚动。如您所见,它会在每个滚动事件上重新定位元素。要了解我的意思,请尝试在此处水平和垂直滚动

然而,对于移动浏览器来说,这种逻辑是失败的,因为移动浏览器显然要等到整个拖动完成后才会绘制,从而导致不稳定的体验


垂直固定元素但仍允许移动浏览器水平滚动的好方法是什么?

如果您使用设置为
高度:100%
的容器框,并将
html
主体
元素的高度设置为100%,则可以使用
位置:绝对;排名:0用于固定标题,并为要垂直滚动的框设置
溢出:自动
(或
滚动

记住将正文和html页边距设置为0,以避免浏览器默认样式

我已经更新了你的小提琴:


此解决方案根本不使用javascript,因此它可以在移动浏览器上工作,因为您不依赖滚动事件。

在使用position:fixed;但只实现了水平滚动部分。 我更新了我的小提琴,所以它也提供了水平滚动

我所做的是保持verticalFixedBox的位置:固定在它的位置,但添加另一个具有相同内容的div,但不透明度为0.01,位置:绝对;保留水平滚动条

就像这里:

HTML:

JavaScript:

$(window).scroll(function() {
$('#verticallyFixedBox').css({
        'left': -1 * $(this).scrollLeft()
    });
});
唯一的问题:opera mini似乎还不支持position:fixed功能:

您可以在纯CSS中完成

#垂直固定框{
位置:粘性;
排名:0;
}
正文{
保证金:0;
}
#垂直固定盒{
位置:粘性;
排名:0;
背景:#ccc;
边框底部:2倍实心#000;
填充:10px;
空白:nowrap;
}

Lorem ipsum dolor sit amet,是一位杰出的献身者。Donec将ipsum nec sapien发酵液添加到luctus中。我们的葡萄品种既有效率,又有价值。弗林蒂利亚·莱克托斯的克拉斯。丙戊酸钠引起的出血。Fusce eu mattis urna,在cursus elit。阿利奎姆·埃拉特·帕特。这是福西布斯的一个小故事。多内克和我的威尼斯人,调味品,甜品。

Lorem ipsum dolor sit amet,是一位杰出的献身者。Donec将ipsum nec sapien发酵液添加到luctus中。我们的葡萄品种既有效率,又有价值。弗林蒂利亚·莱克托斯的克拉斯。丙戊酸钠引起的出血。Fusce eu mattis urna,在cursus elit。阿利奎姆·埃拉特·帕特。这是福西布斯的一个小故事。多内克和我的威尼斯人,调味品,甜品。

非图尔皮斯人非奥奇人的宗教信仰。不可否认的是,无论是连续发酵还是非连续发酵,我们都可以从中受益。毛里斯·康莫多·康瓦利斯·米(Mauris commodo convallis mi),塞德·乌兰·科珀·埃尼·莫利斯·埃吉特(Elim mollis eget)。大师们是猫,是欧盟内部的元素,设施是公正的。在埃尼姆康瓦利斯莫利斯的塞姆珀·维利特。在faucibus中,Interdum和malesuada在第一次同侧前就出名了。杜伊斯是奥奇马格纳人。Duis blandit orci ac发酵拍卖行。在hac habitasse Plateum,一句名言。阿美·莫莱斯蒂·菲利斯和康格·普鲁斯坐在一起。毛里斯门的门上有一个小酒馆。库拉比图特里斯蒂克费利斯酒店。

这是一种非宗教信仰,非宗教信仰。这是一个伟大的时代。用权杖代替老鼠叮叮铃铛。这是一个侵权人、侵权人和侵权人。Nam nisl mauris,pharetra vitae的权杖,lacinia vitae sapien。这是一个巨大的挑战。这是一种莫利斯积累。

未产妇、最易受孕的外阴人、最易受孕的女性、最易受孕的女性和最易受孕的女性。你的侵权行为是不合法的。在maximus nisi placerat,使用扫描电镜观察purus效率。这是一个充满变数的世界,是一个共同的世界。Donec ac viverra risus。我坐在奥古斯特·马莱苏阿达的位子上,这是一个巨大的挑战。发酵相思菌lorem vel ullamcorper Comodo。普罗因·拉奥里特·费吉亚特·乌兰科珀。毛里斯拍卖人利奥·尤因·德图尔。不可随意使用元素舌。佩伦茨克尼斯尔乌纳,威尼斯箭矢,非尼伯氏葡萄品种。

莫瑞斯酵母菌(Mauris酵母菌)是一种暂时性的威尼斯酵母菌。这是一个很好的解决方案,它的最终目的是让你的身体健康。非nibh eu pellentesque的马利苏达库拉比图。这是一种调味品。毛里斯·廷西德·毛里斯和佩伦茨克。在risus Tempora,在viverra arcu,在mattis ex maximus。这是一个永久的侵权人。康莫多的杜伊斯·奥纳雷·菲尼布斯·努克。有尊严的人会被侮辱。Nunc eu ultricies leo。Morbi cursus我只是eget tempus。在hac habitasse Plateum,一句名言。在时间上,自由女神阿利奎姆(ullamcorper aliquam),精英自由女神马蒂斯·麦格纳(mattis magna),坐在阿梅特·廷西登(amet tincidunt mi tellus eu purus)的座位上。埃尼安·塞德·维利特·努克。努克·奎斯·洛博蒂斯·埃尼姆,非索达莱斯·内克。

避免使用JavaScript解决布局问题。如果我了解您要查找的内容,那么您希望最顶端的元素
verticallyFixedBox
,保持在一个位置,并且希望其内容可以滚动,而不管屏幕大小如何

将垂直固定框的内容放入一个单独的
div
元素中。然后将该子元素
div
设置为可滚动元素。您必须确保将垂直固定框的顶部、左侧和右侧固定到浏览器窗口的顶部、左侧和右侧

#verticallyFixedBox
    background: #ccc;
    border-bottom: 2px solid #000;
    padding: 10px;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
}

#scroll {
    position: relative;
    overflow: scroll;
    white-space: nowrap;
}

<div id='verticallyFixedBox'>
    <div id='scroll'>
    Lorem ipsum dolor...rest of text. 
    </div>
</div>
#垂直固定框
背景:#ccc;
边框底部:2倍实心#000;
填充:10px;
位置:固定;
#verticallyFixedBox {
    background: #ccc;
    border-bottom: 2px solid #000;
    left: 0;
    padding: 10px;
    position: fixed;
    top: 0;
    white-space: nowrap;
}
.scroller {
    opacity:0.01;
    position:absolute;
    white-space: nowrap;
    padding: 10px;
    top:0px;
    left:0px;
}
#padder {
    height: 30px;
}
$(window).scroll(function() {
$('#verticallyFixedBox').css({
        'left': -1 * $(this).scrollLeft()
    });
});
#verticallyFixedBox
    background: #ccc;
    border-bottom: 2px solid #000;
    padding: 10px;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
}

#scroll {
    position: relative;
    overflow: scroll;
    white-space: nowrap;
}

<div id='verticallyFixedBox'>
    <div id='scroll'>
    Lorem ipsum dolor...rest of text. 
    </div>
</div>