Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery背景图像滑块菜单滑块框未正确获取初始位置_Jquery_Animation_Menu_Slider_Position - Fatal编程技术网

jQuery背景图像滑块菜单滑块框未正确获取初始位置

jQuery背景图像滑块菜单滑块框未正确获取初始位置,jquery,animation,menu,slider,position,Jquery,Animation,Menu,Slider,Position,我正试图建立我自己的菜单的基础上 我几乎成功了,但删除了包含菜单的页面。已设置动画的滑块框未正确获取其初始位置() 但是,如果我使用alert来检查它放置的位置和宽度,在从左到右抛出带有宽度和位置详细信息的alert函数后,它在Opera&FF中运行良好,但在Chrome中运行不正常 HTML文档: 经过一天的头脑风暴,我发现了这一点,并使菜单在CHROME、MOZ和OPERA中完美运行,尽管由于支持CSS3,在IE 9之前的版本中仍然存在一些问题,但滑动和定位在IE8及以下版本中也有效。我想你

我正试图建立我自己的菜单的基础上

我几乎成功了,但删除了包含菜单的页面。已设置动画的滑块框未正确获取其初始位置()

但是,如果我使用alert来检查它放置的位置和宽度,在从左到右抛出带有宽度和位置详细信息的alert函数后,它在Opera&FF中运行良好,但在Chrome中运行不正常

HTML文档:
经过一天的头脑风暴,我发现了这一点,并使菜单在CHROME、MOZ和OPERA中完美运行,尽管由于支持CSS3,在IE 9之前的版本中仍然存在一些问题,但滑动和定位在IE8及以下版本中也有效。我想你可以在IE8及以上版本中使用PIE来支持它。
所以我把工作代码放在这里。找到()

问题是浏览器无法检索初始位置:“currentitem”的左侧,因为它们尚未在css中定义,所以浏览器在定位currentitem后会抛出值,根据浏览器放置元素本身的计算,这也是因为它的容器被定义为绝对的,所以它会在视口/屏幕中不断计算元素的位置,这与每个浏览器不同

当我使用alert为每个“currentitem”抛出宽度和位置值时,我检查了这一点&它们来自不同的浏览器。例如“currentitem”博客:

当我使用alert时,它在将“currentitem”的值放在屏幕上之前存储它的值,该值是根据其父绝对元素“menutxtwrapper”计算的,这一结果出人意料地正常

解决方案:根据上述理论,我决定将所有“li”元素和“currentitem”定义为绝对元素,并将它们放置在我需要的位置。这使得“定义其左位置”在CSS中可用,因此当文档加载每个li的左值时¤titem可用于计算

为此,我在CSS中为每个“li”添加了额外的细节,“id”,并将left和width的值放在那里。由于我在“li”中使用了“id”,所以我将[id=“currentitem”]更改为[class=“current\u item”]

对于Script menu.js,几乎没有变化。我们将newWidth计算为[newWidth=$el.width();],这是在[newWidth=$el.parent().width();]之前的值,因为我们现在不是根据父元素而是根据“li”元素本身来计算新宽度

下面的新代码:

新HTML:

<body>

<div id="menu">
  <div id="menutxtwrapper">
       <ul id="menutxtlist_ul"> 
             <li id="about"><a href="#">&nbsp;ABOUT&nbsp;</a></li>
             <img class="hr_divider" id="v1" src="menu-1px-divider.png"/>                     

             <li id="service"><a href="portfolio.html">&nbsp;SERVICES&nbsp;</a></li>
             <img class="hr_divider" id="v2" src="menu-1px-divider.png"/>                        

             <li class="current_item" id="profile">&nbsp;PROFILE&nbsp;</li>
             <img class="hr_divider" id="v3" src="menu-1px-divider.png"/>

             <li id="blog"><a href="#">&nbsp;BLOGS&nbsp;</a></li>
             <img class="hr_divider" id="v4" src="menu-1px-divider.png"/>

             <li id="themes"><a href="themes.html">&nbsp;THEMES&nbsp; </a></li>                                 
       </ul>                                       
  </div>
</div>             

</body>
新脚本:

$(document).ready(function(){   

    var $el, leftPos, newWidth,

        $menu = $("#menutxtwrapper");

        //alert("current item width is:" + $(".current_item").width());
        //alert("current item Left is:" + $(".current_item").position().left);      

        $menu.append("<div id='slider_box'></div>");   
        var $sb = $("#slider_box");

        $sb.width($(".current_item").width());
        $sb.css("left", $(".current_item").position().left);        

        $sb.data("origLeft", $sb.position().left);
        $sb.data("origWidth", $sb.width());


    $("#menutxtlist_ul li").hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.width();

        $("#menutxtlist_ul li").css({
            color: "#ff0000"});

        $sb.stop().animate({
            left: leftPos,
            width: newWidth
        },{duration:600,easing:"easeOutExpo"});
    }, function() {
        $sb.stop().animate({
            left: $sb.data("origLeft"),
            width: $sb.data("origWidth")
        },{duration:1000,easing:"easeOutExpo"});

        $("#menutxtlist_ul li").css({
            color: "#666666"});
    });    
});
$(文档).ready(函数(){
var$el、leftPos、newWidth、,
$menu=$(“#menutxtwrapper”);
//警报(“当前项目宽度为:”+$(“.current_item”).width());
//警报(“当前项目左侧为:”+$(“.current_item”).position().Left);
$menu.append(“”);
var$sb=$(“滑块框”);
$sb.width($(“.current_item”).width();
$sb.css(“左”,“当前项”).position().left);
$sb.数据(“origLeft”,左$sb.位置());
$sb.data(“origWidth”,$sb.width());
$(“#menutxtlist_ul li”).hover(函数(){
$el=$(此项);
leftPos=$el.position().left;
newWidth=$el.width();
$(“#菜单列表_ul li”).css({
颜色:#ff0000“});
$sb.停止().制作动画({
左:左位置,
宽度:新宽度
},{持续时间:600,宽松:“easeOutExpo”});
},函数(){
$sb.停止().制作动画({
左:$sb.data(“origLeft”),
宽度:$sb.数据(“原始宽度”)
},{持续时间:1000,即:“easeOutExpo”});
$(“#菜单列表_ul li”).css({
颜色:#666666“});
});    
});
查找()。

好的一面是,菜单是绝对的,如果你有WYSWYG编辑器,只需将菜单移动并放置在你想要的任何地方。

请将代码粘贴到StackOverflow中;过几天,当你的坏代码被删除后,这个问题对于其他试图解决类似问题的人来说几乎毫无意义——所有的引用都将丢失。如果您将损坏的代码粘贴到这里,只要有社区希望保留它,它就可以被保留。谢谢。还有,请不要再喊了。它让人们更难阅读,也不会很快给你答案@萨诺尔德,谢谢你的编辑。你以一个字母和鼠标点击的速度击败了我。:)@肯·怀特,很抱歉“这篇文章已被编辑…”的消息:)我希望我没有在编辑中破坏太多其他内容。@sarnold。我做的基本上和你做的一样。我也在做链接文本中的大写字母,但它们没有那么烦人。:)
body { background:#333333; }

#slider_box {
    background:url(hover-menu.png);
    height:39px;
    position:absolute;
    top:-10px;
    left:0px;   
    z-index:3;

    border-bottom-left-radius: 10px 10px;
    border-bottom-right-radius: 10px 10px;
    -moz-border-bottom-left-radius: 10px 10px;
    -moz-border-bottom-right-radius: 10px 10px; }

#menu {
    background:url(menu-base.png);
    width:525px;
    height:55px;
    position:absolute;
    top:60px;
    right: 395px;
    z-index:2;
}

#menutxtwrapper {
    position:absolute;
    width:525px;
    height:55px;
    left:29px;
    top:10px;
    margin: 0 auto;

    z-index:5;
}

#menutxtlist_ul {
    position:absolute;
    height:55px;
    top: 0px;
    left: 0px;
    margin:0px;
    padding:0px;
    list-style:none;

    z-index:6;
}

#menutxtlist_ul li {
    font-family:'Cuprum', arial, serif; 
    font-size:16px; 
    letter-spacing:2px;  
    display:inline;
    z-index:6; }

#menutxtlist_ul li a {      
    color:#666666;  
    list-style:none;
    text-decoration: none;
    text-transform: uppercase;  
    z-index:6;

    -webkit-transition: color 0.5s ease-in-out;
    -moz-transition: color 0.5s ease-in-out; 
    -o-transition: color 0.5s ease-in-out; 
    -ms-transition: color 0.5s ease-in-out; }   

#menutxtlist_ul li a:hover {
    color: #333333;  }

#currentitem {
    font-family:'Cuprum', arial, serif; 
    font-size:16px;
    letter-spacing:2px;  
    display:inline;
    color: #666666;

    -webkit-transition: color 0.4s ease-in;
    -moz-transition: color 0.4s ease-in; 
    -o-transition: color 0.4s ease-in-out; 
    -ms-transition: color 0.4s ease-in-out;  }

#currentitem:hover { cursor:pointer; }

.hr_divider { 
    margin:auto 10px;
    vertical-align:middle; 
    border:none; 
    text-decoration:none; }
             WIDTH       POSITION  

CHROME       73           337
MOZILLA      78           302.3833  
OPERA        77           304
<body>

<div id="menu">
  <div id="menutxtwrapper">
       <ul id="menutxtlist_ul"> 
             <li id="about"><a href="#">&nbsp;ABOUT&nbsp;</a></li>
             <img class="hr_divider" id="v1" src="menu-1px-divider.png"/>                     

             <li id="service"><a href="portfolio.html">&nbsp;SERVICES&nbsp;</a></li>
             <img class="hr_divider" id="v2" src="menu-1px-divider.png"/>                        

             <li class="current_item" id="profile">&nbsp;PROFILE&nbsp;</li>
             <img class="hr_divider" id="v3" src="menu-1px-divider.png"/>

             <li id="blog"><a href="#">&nbsp;BLOGS&nbsp;</a></li>
             <img class="hr_divider" id="v4" src="menu-1px-divider.png"/>

             <li id="themes"><a href="themes.html">&nbsp;THEMES&nbsp; </a></li>                                 
       </ul>                                       
  </div>
</div>             

</body>
body { background:#333333; }

#slider_box {
    background:url(hover-menu.png);
    height:39px;
    position:absolute;
    top:-10px;
    left:0px;   
    z-index:3;

    border-bottom-left-radius: 10px 10px;
    border-bottom-right-radius: 10px 10px;
    -moz-border-bottom-left-radius: 10px 10px;
    -moz-border-bottom-right-radius: 10px 10px; }

#menu {
    background:url(menu-base.png);
    width:525px;
    height:55px;
    position:absolute;
    top:60px;
    right: 382px;
    z-index:2;
}

#menutxtwrapper {
    position:absolute;
    width:525px;
    height:55px;
    left:25px;
    top:10px;
    margin: 0 auto;
    z-index:5;
     }

#menutxtlist_ul {
    position:absolute;
    height:55px;
    top: 0px;
    left: 0px;
    margin:0px;
    padding:0px;
    list-style:none;

    z-index:6;
}

#menutxtlist_ul li {
        position:absolute;
    font-family:'Cuprum', arial, serif; 
    font-size:16px;
    color: #666666; 
    letter-spacing:2px;  
    display:inline;
    z-index:6;

    -webkit-transition: color 0.4s ease-in;
    -moz-transition: color 0.4s ease-in; 
    -o-transition: color 0.4s ease-in-out; 
    -ms-transition: color 0.4s ease-in-out;  }

#menutxtlist_ul li a {      
    color:#666666;  
    list-style:none;
    text-decoration: none;
    text-transform: uppercase;  
    z-index:6;

    -webkit-transition: color 0.5s ease-in-out;
    -moz-transition: color 0.5s ease-in-out; 
    -o-transition: color 0.5s ease-in-out; 
    -ms-transition: color 0.5s ease-in-out; }   

#menutxtlist_ul li a:hover {
    color: #333333;  }

.currentitem{   
    position:absolute;   
    display:inline;

     }

.currentitem:hover{ cursor:pointer; }


.hr_divider {
    position:absolute;
    margin:auto 10px;
    vertical-align:middle;
    border:none;
    text-decoration:none;


}

#v1 {
    top: 0px;
    left: 66px;
}
#v2 {
    top: 0px;
    left: 183px;
}
#v3 {
    top: 0px;
    left: 287px;
}
#v4 {
    top: 0px;
    left: 372px;
}

#about{
    width:60px;
    height:20px;


    position:absolute;
    left: 5px;
    top: 8px;
    text-align:center;
}

#blog{
    width:60px;
    height:20px;


    position:absolute;
    left: 311px;
    top: 9px;
    text-align:center;

}

#service {
    width:90px;
    height:20px;


    position:absolute;
    left: 91px;
    top: 9px;
    text-align:center;
}

#profile{
    width:80px;
    height:20px;


    position:absolute;
    left: 207px;
    top: 9px;
    text-align:center;
}

#themes{
    width:70px;
    height:20px;


    position:absolute;
    left: 395px;
    top: 9px;
    text-align:center;
}
$(document).ready(function(){   

    var $el, leftPos, newWidth,

        $menu = $("#menutxtwrapper");

        //alert("current item width is:" + $(".current_item").width());
        //alert("current item Left is:" + $(".current_item").position().left);      

        $menu.append("<div id='slider_box'></div>");   
        var $sb = $("#slider_box");

        $sb.width($(".current_item").width());
        $sb.css("left", $(".current_item").position().left);        

        $sb.data("origLeft", $sb.position().left);
        $sb.data("origWidth", $sb.width());


    $("#menutxtlist_ul li").hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.width();

        $("#menutxtlist_ul li").css({
            color: "#ff0000"});

        $sb.stop().animate({
            left: leftPos,
            width: newWidth
        },{duration:600,easing:"easeOutExpo"});
    }, function() {
        $sb.stop().animate({
            left: $sb.data("origLeft"),
            width: $sb.data("origWidth")
        },{duration:1000,easing:"easeOutExpo"});

        $("#menutxtlist_ul li").css({
            color: "#666666"});
    });    
});