我已经添加了 Bootstrap 和 data-spy 属性的库,我想在向下滚动页面时在其中进行div 修复。但是它不起作用,我几乎尝试了所有方法,但无法找出问题所在。是像数据间谍属性在类="行"上不起作用的东西吗?这是我的 HTML 代码。
<div class="row">
<h4> HEADING </h4>
<h5>
<div class="row" data-spy="affix" data-offset-top="10">
dsds
Date : <input type="date" name="graph_date" id="graph_date">
</div>
<div class="row">
<div class="graph-hourly">
<div class="loader" id="chart_loader">
<p>Loading...</p>
</div>
<script type="text/javascript" src="https://www.gstatic.com/charts/loader.js"></script>
<div id="chart_hourly"></div>
</div>
</div>
</div>
和一些 css :
.affix {
top : 0;
width: 80%;
}
在搜索了一些解决方案后,我也添加了这个,
.affix-top {
width: 100%;
}
.affix-bottom {
position: absolute;
width: 100%;
}
但是这个解决方案对我也不起作用。
不确定您的情况是什么问题。我使用引导库将您的代码复制并粘贴到 jsfiddle 中,并且 affix 类确实有效。不过,它的效果很糟糕,因为它在您开始滚动时就贴上了该行。
看起来 Bootstrap 没有办法将偏移量设置为元素的当前位置,所以我添加了以下 javascript 来使其工作。
$('#affix-this').affix({
offset: {
top: $('#affix-this').offset().top
}
})
(#affix-this
应更改为要附加的行的 id。
请注意$('#affix-this').offset().top
。这样可以确保元素在您到达元素的当前位置时正确粘贴。
其次,我删除了您用于附加的 html 属性。
<div class="row">
<h4> HEADING </h4>
<div class="row" id="affix-this">
dsds Date :
<input type="date" name="graph_date" id="graph_date">
</div>
<div class="row">
<div class="graph-hourly">
<div class="loader" id="chart_loader">
<p>Loading...</p>
</div>
<div id="chart_hourly"></div>
</div>
</div>
请注意,affix-this
id 已添加到要附加的行中。
下面是一个包含这些更改的工作 JSFiddle,因此您可以看到它的实际效果:https://jsfiddle.net/heraldo/6s4u26m3/4/
首先从后缀类中删除top:0;
,因为它会给您带来问题。
现在你有两种方法选择一个:
1
添加data-spy="affix"
对我来说效果很好
阿拉伯数字
相同的结果屁股data-spy
但完成页面后您将需要一些样式
通过为input
标记添加position
属性
例如:.CSS:
sticky{
position:fixed;
}
和 HTML :
<input type="date" name="graph_date" class="sticky" id="graph_date">
更新 1
这个Jquery代码可以检测滚动事件,所以当用户向下滚动时,它会使div
标签粘滞或"词缀"
$(function() {
$(window).scroll(function() {
var aTop = "100";
if ($(this).scrollTop() >= aTop) {
$('#affix-this').css( "position", "fixed" );
$('#affix-this').css( "top", "0" );
$('#affix-this').css( "width", "100%" );
}
});
});
将aTop
变量更改为所需的高度(以像素为单位),以便当用户向下滚动 100px 时,div 变得粘滞
一个 JSfiddle 示例
1.1 更新
更聪明一点的Jquery代码做同样的事情,但从另一个元素自动获取高度,如果您将页面格式化为与此类似的格式,这可能会很好
$(function() {
$(window).scroll(function() {
var aTop = $('id').height();
if ($(this).scrollTop() >= aTop) {
$('#affix-this').css( "position", "fixed" );
$('#affix-this').css( "top", "0" );
$('#affix-this').css( "width", "100%" );
}
});
});
在加载 Bootstrap 脚本之前,请确保在 DOM 中创建了要添加data-spy="affix
元素。我遇到了一个问题,我在 HTML 中添加data-spy="affix"
,但由于data-ng-if
,它被包装在一个没有渲染的部分。我的 HTML 是在 Bootstrap 加载后创建的,因此我想粘在屏幕顶部的<div>
从未停留在固定位置。如果可以,请使用 data-ng-show
,或者仅隐藏 HTML 的内容,而不是阻止在页面加载时创建它。