我正在尝试在标题的最顶部创建一个滑动箭头,该箭头根据当前活动的菜单项水平滑动。
编辑 - 我作为示例所指的网站不再活跃。
当页面加载时,箭头应该在正确的位置(即在活动菜单项的正上方)。目前,我努力让它从屏幕左侧滑入,然后在页面加载/刷新时停留在活动按钮上方。
我目前在我的网站上使用 jQuery 1.8.3、Modernizr 和 Cycle Lite 来实现各种其他功能。
我正在尝试在标题的最顶部创建一个滑动箭头,该箭头根据当前活动的菜单项水平滑动。
编辑 - 我作为示例所指的网站不再活跃。
当页面加载时,箭头应该在正确的位置(即在活动菜单项的正上方)。目前,我努力让它从屏幕左侧滑入,然后在页面加载/刷新时停留在活动按钮上方。
我目前在我的网站上使用 jQuery 1.8.3、Modernizr 和 Cycle Lite 来实现各种其他功能。
以下小提琴演示了我所了解的您正在寻找的内容:
以下是jsfiddle javascript。在此,我使用边距调整了 nav_arrow,但您可以轻松地将其绝对定位并根据选项的 offsetLeft 移动它。
在 mouseover 和 mouseout 事件中添加排列函数 arr(),这意味着可以计算 nav_arrow 的新位置,并相应调整边距,默认选项由 mouseout 发送以使箭头弹起默认返回。
每个菜单项都添加了属性默认值,以便 onclick 事件更改哪个项目成为默认返回 - 尽管这假设您的链接是动态的并且页面不会重新加载/更改到另一个页面,如果是这种情况,那么您应该将哪个 div 的 id="d" 更改为不同页面 html 上的相应项目,并相应地调整代码。
我还添加了一个微调数组,因此您可以将每个 div 上的箭头定位到您喜欢的精确点。这些值被添加到每个菜单项的左侧位置,因此对于 link1 来说,它的宽度是 60ish,并且使用填充/边距等微调 34,将 nav_arrow 放在中心:
window.onload = function () {
var fine = [36, 34, 34, 34];
var mitms = document.getElementsByClassName('mitm');
var l0 = (mitms[0].offsetLeft + fine[0]);
document.getElementById("nav_arrow").style.marginLeft = l0 + "px";
for (var i = 0; i < mitms.length; i++) {
mitms[i].default = false;
mitms[i].fine = fine[i];
mitms[i].onmouseover = function () {arr(this);};
mitms[i].onmouseout = function () {
var tmp = document.getElementsByClassName('mitm');
for (var j=0; j<tmp.length; j++) {
if (tmp[j].default === true) {arr(tmp[j]); break;}
}
};
mitms[i].onclick = function() {
var tmp = document.getElementsByClassName('mitm');
for (var j=0; j<tmp.length; j++) {tmp[j].default = false;}
this.default = true;
}
}
mitms[0].default = true;
};
function arr(el) {
var mitms = document.getElementsByClassName('mitm');
var l = el.offsetLeft + el.fine;
document.getElementById("nav_arrow").style.marginLeft = l + "px";
}
该 html 类似于您提供的示例站点:
<div id="nav">
<div id="d" class="mitm"><a href="#">Default</a></div>
<div class="mitm"><a href="#">Link1</a></div>
<div class="mitm"><a href="#">Link2</a></div>
<div class="mitm"><a href="#">Link3</a></div>
<div id="nav_arrow"></div>
</div>
平滑过渡被 css 覆盖:
#nav_arrow {
position: relative;
margin: 20px 0 0 0;
/* Gets you your triangle, no image needed */
background: transparent;
border-left: 7px solid transparent;
border-right: 7px solid transparent;
border-top: 10px solid #000;
border-bottom: none;
width: 0px;
height: 0px;
font-size: 1px;
/* Transitions to give smooth movement*/
transition: margin 1s;
-moz-transition: margin 1s; /* Firefox 4 */
-webkit-transition: margin 1s; /* Safari and Chrome */
-o-transition: margin 1s; /* Opera */
/* IE doesn't support until ie10 */
}
由于 IE 还不支持 css 转换,我相信会有一个合适的 jquery 解决方案来使 IE 转换平滑。
希望有所帮助!
编辑!
这也可以通过简单的 css 使用,例如:
#menuitem1:hover ~ #nav_arrow {
margin: 0px 0px 0px 185px;
}
假设 menuitem1 是
<a id='menuitem1'></a>
并像以前一样使用转换等。