display设置显示隐藏,transition过渡不起效果,采用opacity+visibility+dispaly解决问题

本文介绍了一种使用CSS的visibility和opacity属性实现弹出窗口淡入淡出动画的方法,并提供了具体的实现步骤。

一、场景如下,需要给一个弹出窗设置动画,淡入淡出效果。

在这里插入图片描述
当我们点击按钮123时,对应的下方弹出层展示在页面上,再次点击或点击文档其他处时,我们需要将弹出层隐藏(带有动画效果)。

二、直接采用display:none;display:block;过渡transition不起效果。

从个人理解角度上来说的话,transition对display不起效果的原因是因为,设置display后,浏览器相当于重新更新了,回流了,以至于过渡不起效果,那么我们改如何去巧妙地解决这个问题?

三、解决方案

<style>
// 在style中同时设置visibility、与opacity 
.isNone {
  visibility: visible;
  opacity: 1;
  transition: all 0.5s;
}
.isBlock {
  visibility: hidden;
  opacity: 0;
  transition: all 0.5s;
}
</style>
3.1 visibility与opacity二者区别?

至于为什么要同时设置visibility与opacity,首先我们要知道两者的区别

属性提示
opacity透明度,占据文档位置并不是真的隐藏,设置为0时是可以触发事件的
visibilityvisibility 属性规定元素是否可见,即使不可见的元素也会占据页面上的空间,不会触发事件

我们需要知道的是单独使用visibility、opacity都是不可取的,如果单独使用visibility,就会导致元素没有过渡效果,这个为什么我们可以这样去理解,将visibility的hidden看做0,visibility的visible看做1。而transition则是0-1过渡属性,而当transition开始运行时visibility的hidden由0走向0.01,那么这个时候dom元素就会立刻显示,因为visibility同样也将0.01看做成了1。

这个时候我们就需要去搭配opacity去使用了因为我们需要隐藏时不能触发dom事件,也同样需要隐藏是实现过渡效果。

3.2 如何不让其占据页面位置?

此时我们同样要思考一个问题,就是如何将已经隐藏好的dom元素,不让其占据页面上的位置呢?

    // 点击按钮方法
    isNone(e) {
      // 清除冒泡
      e.stopPropagation();
      // 获取ref属性,每次我们点击时我们立刻会将元素进行展示
      this.$refs["box"].style.display = "block";
      // 并且我们清除掉我们的定时器,防止多次点击,多次触发
      clearTimeout(this.time);
      // 设置为取反
      this.none = !this.none;
      // 如果对应的显示效果为false时,我们就将设置一个定时器,0.5秒之后设置display=none,此处对照上方transition所设置的时间s
      if (!this.none) {
        this.time = setTimeout(() => {
          this.$refs["box"].style.display = "none";
        }, 500);
      }
    },

在这里插入图片描述
对照jsx render函数来讲解一下运行的过程

click按钮 → 属性立即设置为block → 运算过程 → data值变更(class属性进行变更) → 对应transition过渡效果 → 0.5s后调用setTimeout函数执行display=none;

rk3588 下使用v4l2 采集摄像头,然后使用 mpp 压缩成 h264 最后用rtsp 输出流媒体,个人原创,学习v4l2, mpp 压缩, rtsp 流媒体可以参考学习,已工程使用,分辨率自动支持完善,有时间再改优化在现代数字媒体处理领域,rk3588处理器由于其强大的性能和高集成度,已成为众多开发者和制造商的首选。rk3588是一块高性能的系统级芯片(SoC),广泛应用于智能电视、平板电脑、工业控制等多种场景。本项目主要探讨了如何在rk3588平台上,通过v4l2接口采集摄像头的图像数据,再利用MPP(Media Processing Platform,多媒体处理平台)将其压缩成h264格式的视频流,并最终通过RTSP(Real Time Streaming Protocol,实时流媒体传输协议)实现流媒体的输出。v4l2是Linux内核中用于视频输入输出的设备驱动架构,它是Video4Linux的第二版。v4l2提供了一套标准的编程接口,让应用程序能够访问和控制摄像头等视频捕获设备。在这个项目中,v4l2的作用是作为视频数据采集的接口,把摄像头捕获到的原始图像数据读取出来。MPP是Rockchip公司为RK系列芯片开发的一套多媒体处理方案,它能在硬件层面上实现对多媒体数据的编解码处理。在本项目中,MPP的主要工作是接收来自v4l2的原始视频数据,并将这些数据压缩编码成h264格式。h264是一种广泛使用的视频压缩标准,具有高压缩比和良好的视频质量,非常适合作为网络传输的视频格式。RTSP是一种网络控制协议,用来控制音频和视频流的点播,允许像播放、暂停、停止等控制,因此它经常被用于流媒体服务中。项目最后通过RTSP协议输出压缩后的视频流,使用户可以通过网络实时观看视频内容。该工程的一个主要亮点是它支持自动分辨率调整。这意味着摄像头采集的视频数据可以自动适应同的输出需求,无需手动设置,极大地方便了用户使用。然而,开发者也提到目前分辨率的自动支持还完善,存在一些兼容性和稳定性方面的问题,因此计划未来会进一步优化和改进。整个项目是一个典型的多媒体数据处理流程,从视频数据的采集、处理到传输,覆盖了多媒体应用的多个关键环节。对于学习和掌握v4l2、MPP压缩技术和RTSP流媒体传输的开发者来说,该项目的代码和工程实践可以提供非常宝贵的参考价值。同时,由于它已经应用于实际工程,因此项目的成熟度和实用性也得到了验证。由于该项目还处于开发和完善阶段,它也给开发者留下了一定的改进空间。例如,对分辨率自动支持的完善,以及可能的性能优化等,都是值得进一步研究的方向。对于那些希望在rk3588平台上开发流媒体服务的开发者来说,该项目无疑是一个非常值得研究的案例。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

归来巨星

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值