我正在尝试编写一个jQuery脚本,该脚本将从我的css class元素找到到浏览器窗口右边缘的距离,然后根据右侧的可用空间将子菜单下拉列表定位到右侧或左侧。此外,它还需要恢复到悬停时的默认设置。这是我到目前为止所掌握的,但计算不正确。
$(document).ready(function(){
$('#dnnMenu .subLevel').hover(function(){
if ($(window).width() - $('#dnnMenu .subLevel').offset().left - '540' >= '270')
{
$('#dnnMenu .subLevelRight').css('left', '270px');}
else {$('#dnnMenu .subLevelRight').css('left', '-270px');}
});
$(document).ready(function () {
function HoverOver() {
$(this).addClass('hover');
}
function HoverOut() {
$(this).removeClass('hover');
}
var config = {
sensitivity: 2,
interval: 100,
over: HoverOver,
timeout: 100,
out: HoverOut
};
$("#dnnMenu .topLevel > li.haschild").hoverIntent(config);
$(".subLevel li.haschild").hover(HoverOver, HoverOut);
});
基本上,我试着取当前窗口的宽度,减去到第一级子菜单浏览器左边缘的距离,减去两个元素的宽度,这将等于540px,以计算当第一级子命令悬停在上面时到窗口右边缘的距离。如果到我的第一级子菜单元素右侧的距离小于540px,则第二级子菜单css属性将更改为向左而不是向右的位置。我还知道,它需要在悬停后恢复到默认值,这样它就可以重新计算与菜单结构中其他位置的距离,并且仍然有足够的空间显示在第一级的右侧的第二级子菜单。这里是有关元素的css。
#dnnMenu .subLevel{
display: none;
position: absolute;
margin: 0;
z-index: 1210;
background: #639ec8;
text-transform: none;}
#dnnMenu .subLevelRight{
position: absolute;
display: none;
left: 270px;
top: 0px;}
这个网站还没有上线,我试着创建了一个jsfiddle,但看起来不对。如有任何帮助,我们将不胜感激!
谨致问候,马里奥
这是我为解决问题而编写的jQuery。
$(document).ready(function () {
$('#dnnMenu').mouseout(function () {
if ((viewportRight - myRight) >= '540') {
$('#dnnMenu .subLevelRight').css('left', '-270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '270px'); }
});
});
$(document).ready(function () {
function HoverOver() {
$(this).addClass('hover');
}
function HoverOut() {
$(this).removeClass('hover');
}
var config = {
sensitivity: 2,
interval: 100,
over: HoverOver,
timeout: 100,
out: HoverOut
};
$("#dnnMenu .topLevel > li.haschild").hoverIntent(config);
$(".subLevel li.haschild").hover(HoverOver, HoverOut);
});
$(document).ready(function () {
$('#position1').mouseout(function () {
var myLeft = $("#position1").offset().left;
var myTop = $("#position1").offset().top;
var myRight = myLeft + $("#position1").outerWidth();
var myBottom = myTop + $("#position1").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position2').mouseout(function () {
var myLeft = $("#position2").offset().left;
var myTop = $("#position2").offset().top;
var myRight = myLeft + $("#position2").outerWidth();
var myBottom = myTop + $("#position2").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position3').mouseout(function () {
var myLeft = $("#position3").offset().left;
var myTop = $("#position3").offset().top;
var myRight = myLeft + $("#position3").outerWidth();
var myBottom = myTop + $("#position3").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position4').mouseout(function () {
var myLeft = $("#position4").offset().left;
var myTop = $("#position4").offset().top;
var myRight = myLeft + $("#position4").outerWidth();
var myBottom = myTop + $("#position4").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position5').mouseout(function () {
var myLeft = $("#position5").offset().left;
var myTop = $("#position5").offset().top;
var myRight = myLeft + $("#position5").outerWidth();
var myBottom = myTop + $("#position5").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position6').mouseout(function () {
var myLeft = $("#position6").offset().left;
var myTop = $("#position6").offset().top;
var myRight = myLeft + $("#position6").outerWidth();
var myBottom = myTop + $("#position6").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
$(document).ready(function () {
$('#position7').mouseout(function () {
var myLeft = $("#position7").offset().left;
var myTop = $("#position7").offset().top;
var myRight = myLeft + $("#position7").outerWidth();
var myBottom = myTop + $("#position7").outerHeight();
var viewportRight = $(window).width() + $(window).scrollLeft();
var viewportBottom = $(window).height() + $(window).scrollTop();
if ((viewportRight - myRight) >= '400') {
$('#dnnMenu .subLevelRight').css('left', '270px');
}
else { $('#dnnMenu .subLevelRight').css('left', '-270px'); }
});
});
这是css
#position1{
background:transparent no-repeat;
width:110px;
height:2px;
margin-left:15px;
margin-top:-2px;
position:absolute;}
#position2{
background:transparent no-repeat;
width:118px;
height:2px;
margin-left:127px;
margin-top:-2px;
position:absolute;}
#position3{
background:transparent no-repeat;
width:153px;
height:2px;
margin-left:247px;
margin-top:-2px;
position:absolute;}
#position4{
background:transparent no-repeat;
width:178px;
height:2px;
margin-left:402px;
margin-top:-2px;
position:absolute;}
#position5{
background:transparent no-repeat;
width:213px;
height:2px;
margin-left:582px;
margin-top:-2px;
position:absolute;}
#position6{
background:transparent no-repeat;
width:106px;
height:2px;
margin-left:797px;
margin-top:-2px;
position:absolute;}
#position7{
background:transparent no-repeat;
width:78px;
height:2px;
margin-left:905px;
margin-top:-2px;
position:absolute;}
我添加的唯一其他东西是直接位于HTML中其他菜单项下的div id
<div id="position1"></div><div id="position2"></div><div id="position3"></div><div id="position4"></div><div id="position5"></div><div id="position6"></div><div id="position7"></div>
它只是不确定是否所有内容都写得完美。如果你能看到一些错误,请告诉我,这样我就可以清理我的代码。