【问题标题】:How to create opacity effect on webOS?如何在 webOS 上创建不透明效果?
【发布时间】:2016-01-06 12:49:55
【问题描述】:

我的页面中有一个 html 视频元素:

<video id="myVideo" src = "./play.mp4" autoplay loop></video>

我正在让它消失在这样的一些动作中:

var vid = document.getElementById("myVideo");
vid.style.visibility = "hidden";

我可以用

让它再次出现
vid.style.visibility = "visible";

但我希望视频能够顺利播放,我该如何通过 javascript 做到这一点?

我试过了:

vid.style.transition   = "visibility 2s";
vid.style.visibility = "visible";

但它没有用。谁能指出我的错误? (webOS平台不支持jquery和opacitycss属性)

我不能使用 opacity :( --> 开发者文档 : opacity 属性不适用于视频元素。

【问题讨论】:

  • 你能描述一下“平台”吗?
  • 它的webOS平台我也加了:)
  • 您可以在 webOS 上使用 jQuery,但这不能解决不透明度问题(如果这是问题的话)。
  • @Pre101 你是绝对正确的。我发现只有在使用 jQuery 之后才能使用不透明度。

标签: javascript html css webos


【解决方案1】:

您可以使用 css 过渡和 rgba 格式与一些 javascript 来添加不透明动画而无需 css opacity 属性。

var hide = document.getElementById('tryh'),
    show = document.getElementById('trys'),
    foo  = document.getElementById('foo');

show.addEventListener('click', function () {
  foo.className = 'foo show';
});

hide.addEventListener('click', function () {
  foo.className = 'foo hide';
});
.foo {
  position: relative;
  background: rgba(0,0,0,0);
  transition: background-color 1s;
}

.hide {
  background-color: rgba(255,255,255,1);
}

.show {
  background-color: rgba(0,0,0,0);
}

.foo:before {
  position: absolute;
  top: 0; right: 0; bottom: 0; left: 0;
  background-color: inherit;
  content: ' ';
}
<div id='foo' class='foo'>
  <video id="video" src="./play.mp4" controls autoplay loop ></video>
</div>

<button id='trys'>Show</button>
<button id='tryh'>Hide</button>

【讨论】:

  • 非常感谢您的回答。虽然这是在浏览器上工作的,但我只是在 webOS 平台上看到不能应用不透明度。我的错。我刚学到这个。我更新了问题。
  • @PavanK 我添加了一种 rgba 格式的方法。你可以试试看。
  • 再次感谢您的回答。不幸的是,这不再奏效。我认为这与不透明度通过 alpha 通道间接有关。不过我暂时接受你的回答。
【解决方案2】:

你可以使用 jQuery fadeToggle 函数:http://api.jquery.com/fadetoggle/

$('#myVideo').fadeToggle();

例如,如果您有一个隐藏和显示按钮,其 id 为“toggleBtn”:

$('#toggleBtn').on('click', function() {
    $('#myVideo').fadeToggle();
});

jsFiddle:https://jsfiddle.net/98z8wLfL/

【讨论】:

  • 非常感谢,但不幸的是,我正在开发的平台不支持 jquery。
  • @rodes,OP 的问题是关于 JavaScript,而不是 jquery。查看问题和标签
【解决方案3】:

似乎为video 标签添加任何颜色的背景使transition 工作。

这是一个Example,你可以看到我只将background:#000添加到css样式表中的视频标签(例如,div标签不需要)。

CSS:

#myVideo {
  background:#000;
}

JS:

var vid = document.querySelector('#myVideo');
vid.style.transition = "all 0.3s ease-in";

vid.addEventListener('click',function(e) {
  e.target.style.opacity = 0;
})

【讨论】:

  • 非常感谢您的回答。虽然这是在浏览器上工作的,但我只是在 webOS 平台上看到不能应用不透明度。我的错。我刚学到这个。我更新了问题
【解决方案4】:

您的问题是 visibility 不是动画的,也不是可转换的。

如果您真的需要切换它,可以通过transitionend 事件来实现。

var vid = document.getElementById("myVideo");
vid.style.opacity = "1";

// set it only once or in your css
vid.style.transition = "opacity 2s";

btn.onclick = function() {
    if (this.style.visibility !== 'visible') {
      vid.style.visibility = "visible";
    }
    vid.style.opacity = +!+vid.style.opacity;
  }
  // use the transitionend if you need to
vid.ontransitionend = function() {
  if (this.style.visibility === 'visible') {
    this.style.visibility = 'hidden';
  }
}
<video id="myVideo" src="./play.mp4" controls autoplay loop></video>

<button id="btn">show/hide</button>

【讨论】:

  • 非常感谢您的回答。虽然这是在浏览器上工作的,但我只是在 webOS 平台上看到不能应用不透明度。我的错。我刚学到这个。我更新了问题
猜你喜欢
  • 1970-01-01
  • 2021-03-06
  • 2017-02-01
  • 2018-12-24
  • 1970-01-01
  • 2020-10-28
  • 2021-05-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多