TL; DR:Sticky实际上能够对我通过JavaScript提供的更改做出反应吗?如果是这样,怎么样?
(该项目正在使用Foundation 6.2和WordPress 4.4,主题使用Node.js / npm和gulp 4.0安装。我的问题详细地用粗体标记。)
我想使用Foundation的Sticky Plugin使nav
条粘贴,但只有当我点击按钮时才会这样。这意味着当DOM全部完成时,nav
栏不应该自己“#34;”,而是保持在文档的最高位置。 此外,它在向下滚动时会消失,但在向上滚动时会消失。
nav
栏已正确包装在所有必需的div
中,因此nav
栏可以粘贴。问题出现在"另外"部分。我的想法是首先使用PHP实例化Sticky:
<div data-sticky-container>
<header class="header" role="banner" id="sticky_header" data-sticky data-top-anchor="1"
data-btm-anchor="content:top" data-options="marginTop:0;" style="width:100%"
>
<?php get_template_part('parts/nav', 'offcanvas-topbar'); ?>
</header>
</div>
之后,使用点击时触发的JavaScript将data-btm-anchor
更改为当前滚动位置。这并不像我想的那样好用。到目前为止我尝试过的事情:
getElementByID
然后使用setAttribute
时,PHP文件中的data-btm-anchor
会根据Firebug进行更改,但这不会影响nav
栏a位;它保持原样。 我是否需要&#34;重新实施&#34;粘,如果是,怎么样? 使用JavaScript设置选项涉及将对象传递给构造函数,如下所示:
var options = { multiExpand: true, allowAllClosed: false }; var accordion = new Foundation.Accordion($('#some-accordion'), options);
这是否意味着我可以将新参数传递给现有的插件实例?每当我传递一个新的Foundation.Sticky
对象时,只有一个不同的< em> btmAnchor 作为my jQuery('#sticky_header')
的选项数组参数,没有任何反应。
docs还建议以编程方式将Sticky添加到我的&#34; sticky_header&#34;。如果有效,我可以尝试直接改变jQuery对象。到目前为止,我已经能够通过以下方式将Sticky插件成功绑定到我的标题:
assets/js/scripts
(然后运行gulp
)<header class="header">
删除所有数据粘性标记,因此在DOM加载完成后没有向标题注册粘性插件以编程方式添加插件:
function button_fire(){
var options = {
topAnchor:"1",
btmAnchor:"footer:top",
marginTop:"1"
};
var stick = new Foundation.Sticky(jQuery('.header'), options);
}
标题现在获得&#34;粘性&#34;根据Firebug的课程。但它仍然无法工作 - 相反,它会出现故障:&#34;标题空间&#34;有点崩溃所以它略微覆盖了内容&#34; div
以下{。}}你知道什么,标题并不坚持。这是一个错误吗?
假设它可以正常工作&#34;出色地&#34;现在,我理论上能够通过解除引用var stick
或使用jQuery('#sticky_header')
或jQuery('.header')
来更改属性吗?
最重要的是,jQuery并没有按预期工作。我在脚本中使用 $
时遇到了很多问题,例如,我无法运行Sticky的destroy()
方法,因为这个(如果它有效,我可能已经破坏了Sticky的一个实例,使btmAnchor
设置为一个新的滚动位置。我会为此打开另一个问题。
答案 0 :(得分:0)
最好完全使用jquery来控制粘性。
$(document).ready(function(){
$('<Your button>').click(function () {
$('html, body').animate({scrollTop: $('<where you want to go>').offset().top}, 1000);
});
使用此按钮,您可以将按钮滚动到网站的任何部分。
对于粘性,您只想在滚动到第一部分时才添加粘性类,这样:
$(document).ready(function(){
$(<Section name after which you want sticky to appear>).waypoint(function(direction){
if (direction == "down"){
$('nav').addClass('sticky');
}else{
$('nav').removeClass('sticky');
}
}, {
offset: '60px'
});
});
使用Waypoint插件,您现在可以在滚动到某个元素或部分时轻松添加粘性类。 jQuery选择器可以使用#和使用ID和类进行选择。分别。
答案 1 :(得分:0)
您可以仅在scss中使用sticky css属性。
在html或php中将类添加到您的组件中:
<div data-sticky-container class="sticky-container">
以及在scss或css中:
.sticky-container {
position: sticky;
top: 0;
z-index: 10;
}
现在只需把距您所需的顶部的距离放远即可!
答案 2 :(得分:-1)
如果你使用wordpress,它会自动将JQuery排队。
你有两种方法可以在Wordpress中使用JQuery。
使用JQuery代替$
Wordpress在他的无冲突模式下运行JQuery,所以你必须使用Jquery而不是$
你的案子
<div *ngFor="let service of services">
<span><img [src]="service.imgPath" alt="{{ service.name }}"/></span>
<h4>{{service.name | translate}}</h4>
<p>{{service.desc}}</p>
</div>
使用$像变量
你也可以使用$,但你必须定义一个这样的变量:
var options = {
multiExpand: true,
allowAllClosed: false
};
var accordion = new Foundation.Accordion(JQuery('#some-accordion'), options);