2012-02-10 79 views
1

我刚开始学习jquery,我很幸运能够找到工作。 我的第一个代码是在按下按钮时创建“Dim the light”效果,当灯光熄灭时创建“显示灯光”。这部分工作很好。jQuery在mouseout上隐藏元素()

下面的代码:

$(document).ready(function(){ 
    $(".dimlight").click(function(){ 
    $("#overlay").fadeIn(); 
    $(".dimlight").hide(); 
    $(".showlight").show(); 
    }); 
    $(".showlight").click(function(){ 
    $("#overlay").fadeOut(); 
    $(".dimlight").show(); 
    $(".showlight").hide(); 
    }); 
}); 

现在我想采取了一步。我想在mouseout上隐藏任何可见按钮(.showlight或.dimlight)。基本上,活动按钮应该只在用户悬停播放器时才可见(#播放器div)。现在我试着去做,但没有奏效。我怀疑语法错了。它确实看起来很幼稚,对不起,伙计们。这是我的第一次尝试,我希望通过这样做来学习。

下面是扩展的代码do not't工作。

$(document).ready(function(){ 
     $(".dimlight").click(function(){ 
     $("#overlay").fadeIn(); 
     $(".dimlight").hide(); 
     $(".showlight").show(); 
     }); 
     $(".showlight").click(function(){ 
     $("#overlay").fadeOut(); 
     $(".dimlight").show(); 
     $(".showlight").hide(); 
     }); 
     $("#player").mouseover(function(){ 
     if ($('#overlay').is(':hidden')) { 
       $('.dimlight').show(); 
      } else { 
       $('.showlight').show(); 
      } 
     }).mouseout(function() { 

     if ($('.dimlight').is(':hidden')) { 
       $('.showlight').hide(); 
      } else { 
       $('.dimlight').hide(); 
      } 
     }); 
    }); 

任何帮助,非常感谢。

He're的HTML:

<div id="videoplayer_two-col"> 
    <span class="dimlight" title="Baisser la lumi&egrave;re">Baisser la lumi&egrave;re</span> 
    <span class="showlight" title="Alumer la lumi&egrave;re">Alumer la lumi&egrave;re</span> 

    <video id="player" width="633" height="320" poster="assets/components/ME/media/echo-hereweare.jpg" volume="0.5" controls preload="none"> 
     <!-- MP4 source must come first for iOS --> 
     <source type="video/mp4" src="assets/components/ME/media/echo-hereweare.mp4" /> 
     <object width="633" height="320" type="application/x-shockwave-flash" data="assets/components/ME/build/flashmediaelement.swf">  
      <param name="movie" value="assets/components/ME/build/flashmediaelement.swf" /> 
      <param name="wmode" value="transparent" />     
      <param name="flashvars" value="controls=true&amp;file=assets/components/ME/media/media/echo-hereweare.mp4" />   
      <!-- Image fall back for non-HTML5 browser with JavaScript turned off and no Flash player installed --> 
      <img src="assets/components/ME/media/echo-hereweare.jpg" width="640" height="360" alt="Here we are" 
      title="No video playback capabilities" /> 
     </object>  
    </video> 
+0

哪里'#overlay'元素? – papaiatis 2012-02-10 07:46:54

+1

如果您只有一个'.dimlight'和'.showlight'元素,请考虑使用ID而不是类! – papaiatis 2012-02-10 07:50:00

回答

0

在第二if没有要检查的#overlay而不是因为你在mouseover做了隐藏属性?

$(document).ready(function(){ 
    $(".dimlight").click(function(){ 
     $("#overlay").stop() 
      .removeClass('fOut').removeClass('fIn').addClass('fIn') 
      .fadeIn(); 
     $(".dimlight").hide(); 
     $(".showlight").show(); 
    }); 

    $(".showlight").click(function(){ 
     $("#overlay").stop() 
      .removeClass('fOut').removeClass('fIn').addClass('fOut') 
      .fadeOut(); 
     $(".dimlight").show(); 
     $(".showlight").hide(); 
    }); 

    $("#player").mouseover(function(){ 
     console.log("mouseover"); 
     if ($('#overlay').hasClass('fOut')) { 
      $('.dimlight').show(); 
      console.log("dim1"); 
     } else { 
      $('.showlight').show(); 
      console.log("show1"); 
     } 
    }).mouseout(function() { 
     console.log("mouseout"); 
     if ($('#overlay').hasClass('fOut')) { 
      $('.showlight').hide(); 
      console.log("show2"); 
     } else { 
      $('.dimlight').hide(); 
      console.log("dim2"); 
     } 
    }); 
}); 
+0

Thx男子快速回复。你的看起来很不错,除了我试过,按钮没有隐藏或显示。任何线索? – user546585 2012-02-10 07:32:57

+0

不要忘记一些东西:只要'#overlay'渐渐消失,它就不会是':hidden'。只有动画完成if($('#overlay')。(':hidden'))'才会返回true。 – papaiatis 2012-02-10 07:36:17

+0

你能举起一个js小提琴吗?你写的所有东西看起来都很实用 – Fresheyeball 2012-02-10 07:41:43

1
//document ready shorthand 
$(function(){ 

    //consolidate jquery object creation, (every $ makes a new jQuery object) 
    var dimlight = $(".dimlight"), 
     showlight = $(".showlight"), 
     overlay = $("#overlay") 
     isLightOn = true; //your default state 

    dimlight.click(function(){ 
    isLightOn = false; //set state var to dimmed 
    overlay.stop().fadeIn(); // use .stop() to prevent animation queue buildup 
    dimlight.hide(); 
    showlight.show(); 
    }); 
    showlight.click(function(){ 
    isLightOn = false; //set state var to lighted 
    overlay.stop().fadeOut(); // use .stop() to prevent animation queue buildup 
    dimlight.show(); 
    showlight.hide(); 
    }); 

    //hover shorthand 
    $("#player").hover(function(){ 
     if(isLightOn) { //test state var, more efficient and less error prone 
      dimlight.show(); 
     } else { 
      showlight.show(); 
     } 
    },function() { 
     showlight.hide(); // no need for extra logic here, 
     dimlight.hide(); // running .hide() on a hidden element does nothing   
    }); 
}); 
+0

感谢您的结构良好的代码。照明开关可以很好地处理您的输入。但玩家悬停时隐藏的按钮仍然没有发生。我在这里深入一点。不知道发生了什么 – user546585 2012-02-10 08:07:08

+0

给我一个链接请 – Fresheyeball 2012-02-10 08:08:09

+0

什么浏览器? – Fresheyeball 2012-02-10 08:12:11