这可以通过仅修改<ui> <li>
自定义下拉菜单的类来实现吗?
只修改top, left, right, bottom
部分而不是其他内容?或者在那里
一些特殊的魔法,如果有人知道教程请与我分享。我一直无法做到
在互联网上找到一些,非常感谢。
截图:
HTML:
<div class="container">
<ul class="menu openDown">
<li>Option 1</li>
<li>Option 2</li>
<li>Option 3</li>
<li>Option 4</li>
<li>Option 5</li>
</ul>
这是一个小提琴:
编辑:必须在滚动时修改,检测用户是向下滚动还是向上滚动,并根据滚动量,将菜单类修改为向上或向下。谢谢!
编辑:这篇文章不重复,因为链接(Drop-down menu that opens up/upward with pure css)与此非常不同,我希望菜单下拉方向取决于上下滚动的数量。 user,表示确定滚动位置并修改类以向上/向下放置菜单。在Stackoverflow链接中,这是没有实现的,它是纯粹的基于CSS的悬停,这意味着你将以“.no-js”形式使用它。
编辑:两个片段,不确定这是否可以帮助您解决问题。
var menuHeight = $(this).parent().find('.menu').innerHeight();
$(window).scroll(function () {
var fromTop = $(this).scrollTop() + menuHeight;
console.log(fromTop);
});
编辑:赏金仍然是开放的,如果有人知道任何教程或如何实现这一点,分享你的答案,你将获得50点声望点。
答案 0 :(得分:4)
在与OP讨论之后,这就是所需要的:
[这是为引导程序,编辑类以满足您的需要]
.reverse {
top:auto;
bottom:100%;
}
$(".dropdown-toggle").click(function(){
// get the scollTop (distance scrolled from top)
var scrollTop = $(window).scrollTop();
// get the top offset of the dropdown (distance from top of the page)
var topOffset = $(".dropdown").offset().top;
// calculate the dropdown offset relative to window position
var relativeOffset = topOffset-scrollTop;
// get the window height
var windowHeight = $(window).height();
// if the relative offset is greater than half the window height,
// reverse the dropdown.
if(relativeOffset > windowHeight/2){
$(".dropdown-menu").addClass("reverse");
}
else{
$(".dropdown-menu").removeClass("reverse");
}
});
同样如此,这将在引导下拉列表中起作用,因此如果要使用其他框架,则需要更新选择器。
我们的想法是计算元素的top
偏移量与当前scrollTop
之间的差异,然后将reverse
类添加到内部ul
,具体取决于该值与页面中间的比较。
根据要求,这是我如何调整一些事情。
N.B。这使用了Twitter Bootstrap,既可以用于样式和标记,也可以用于javascript,但它绝不是必需的,可以在没有太多麻烦的情况下重新创建。
根据要求,我在下拉列表中添加了两个reverse-toggle
个元素(一个在开头,另一个在结尾)。
<li role="presentation" class="reverse-toggle top-reverse hidden"><a role="menuitem" tabindex="-1" href="javascript:void(0)">Reverse towards top</a></li>
这里重要的部分是reverse-toggle top-reverse
类。其余的是Bootstrap标记。
将javascript:void(0)
添加到a
元素也很重要,如果未添加,则单击按钮时下拉列表将会关闭。
如前所述,这里唯一重要的规则是.reverse
类给出的规则。
此类将应用于包含下拉列表的ul
,并负责反转状态。
.reverse {
top: auto;
bottom:100%;
}
$(window).scroll(function () {
// if the dropdown is "high enough" on the page, show the toggle commands
if(($(window).scrollTop() + $(window).height() > $(document).height() - 256)){
if($(".dropdown-menu").hasClass("reverse")){
// if the dropdown is already reversed
$(".bottom-reverse").removeClass("hidden");
$(".top-reverse").addClass("hidden");
}
else{
$(".top-reverse").removeClass("hidden");
$(".bottom-reverse").addClass("hidden");
}
}
else{
$(".top-reverse").addClass("hidden");
$(".bottom-reverse").addClass("hidden");
}
});
$(".reverse-toggle").click(function(){
$(".dropdown-menu").toggleClass("reverse").dropdown("toggle");
$(".top-reverse").toggleClass("hidden");
$(".bottom-reverse").toggleClass("hidden");
});
JS在这里做了以下两件事: