2013-08-03 92 views
-1

我是新来javascript和jquery,我试图让一个视频的不透明度改变,当我把鼠标悬停在li项目上。我知道'onmouseover'的作品,因为我已经使用相同的jQuery来测试我用来滚动到页面的顶部onclick。使用.style.opacity =使用javascript不工作由于某种原因

该问题似乎是检查和更新视频div的风格不起作用的语法。我从codeacademy的教训适应的代码,不明白为什么它的工作:

window.onload = function() { 

    // Get the array of the li elements  
    var vidlink = document.getElementsByClassName('video'); 

    // Get the iframe 
    var framecss = document.getElementsByClassName('videoplayer1'); 

    // Loop through LI ELEMENTS 
    for (var i = 0; i < vidlink.length; i++) { 
     // mouseover function: 
     vidlink[i].onmouseover = function() { 
      //this doesn't work: 
      if (framecss.style.opacity === "0.1") { 
       framecss.style.opacity = "0.5"; 
      } 
     }; 
     //onclick function to scroll to the top when clicked: 
     vidlink[i].onclick = function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
     }; 
    } 
}; 

这里是一个的jsfiddle你可以看到HTML和CSS:

http://jsfiddle.net/m00sh00/CsyJY/11/

好像这样一个简单的问题,所以我很抱歉,如果我失去了明显的东西。

任何帮助深表感谢

+1

可能重复http://stackoverflow.com/questions/12324733/opacity-and-style- undefined-when-accesing-element-in-js-but-defined-in-css) – JJJ

回答

1

试试这个:

vidlink[i].onmouseover = function() { 
     if (framecss[0].style.opacity === "0.1") { 
      framecss[0].style.opacity = "0.5"; 
     } 
    }; 

或者:

var framecss = document.getElementsByClassName('videoplayer1')[0]; 

或者,更好的,给的iframe的ID,并使用document.getElementById()

getElementsByClassName()函数返回一个列表,不是一个单一的元素。该列表没有style属性。在你的情况下,你知道列表中应该有一个项目,你可以通过[0]索引访问。

或者,因为你正在使用jQuery,你可以重写它是这样的:

$(document).ready(function(){ 
    // Get the iframe 
    var $framecss = $('.videoplayer1'); 

    $('.video').on({ 
     mouseover: function() { 
      if ($framecss.css('opacity') < 0.15) { 
       $framecss.css('opacity', 0.5); 
      } 
     }, 
     click: function() { 
      $("html, body").animate({ 
       scrollTop: 0 
      }, 600); 
     } 
    }); 
}); 

注意,我测试,如果不透明度小于0.15,因为当我尝试了一下在你的提琴它返回为0.10000000149011612而不是0.1。

另外,请注意,您的小提琴中的代码没有运行,因为默认情况下,jsfiddle会将您的JS放入onload处理程序中(可以从左侧的下拉列表中更改),然后您将代码封装在还有window.onload =。而你没有从另一个下拉列表中选择jQuery,所以.animate()将无法​​工作。

这里有一个更新的小提琴:http://jsfiddle.net/CsyJY/23/

[不透明和不确定的风格在accesing JS元素时,但在定义的CSS(中
+0

谢谢nnnnnn。这是一个很好的答案,它解决了我想知道的一切以及更多。感谢jfiddle提示,只是刚开始使用这个工具。你是如何看待该号码被退回的?这是我从未想过的事情。 – Kit

+0

我在mouseover函数的开始处添加了一个'console.log($ framecss.css('opacity'))'语句(实际上我只是检查过了,而我已经把它留在了我的小提琴中)。请注意,如果直接检查'style.opacity',它可能会以空字符串的形式返回,因为您没有在该元素本身设置不透明度,所以您将设置在类中。 – nnnnnn

+0

啊哈谢谢队友! – Kit

相关问题