5分钟搞定微信小程序直播全屏功能:从图标布局到API调用的保姆级指南

微信小程序video 点击自动全屏播放 【代码】微信小程序video 点击自动全屏播放。 阅读详情

微信小程序直播全屏功能实战:从零构建一个优雅的交互体验

最近在做一个电商直播的小程序项目,客户反复强调的一个点就是:“直播播放器的体验一定要好,全屏切换要流畅,不能有卡顿。” 说实话,小程序原生的 live-player 组件功能强大,但在交互细节上确实需要开发者自己动手打磨。尤其是那个“全屏按钮”,官方并没有直接提供,需要我们基于组件API和前端布局来创造。这不仅仅是调用一个API那么简单,它涉及到UI布局的适配、用户交互逻辑的流畅性,以及在安卓和iOS平台上的表现一致性。今天,我就结合自己趟过的几个坑,和你详细聊聊如何从零开始,构建一个既稳定又优雅的小程序直播全屏功能。无论你是刚接触 live-player 的新手,还是想优化现有体验的开发者,相信这篇深度拆解都能给你带来一些实用的思路。

1. 理解 live-player 与全屏交互的本质

在动手写代码之前,我们得先搞清楚我们要对付的是什么。小程序的 live-player 组件是一个用于实时音视频播放的“黑盒子”,它封装了底层的播放能力,并通过 JavaScript API 向我们暴露了控制接口。全屏功能,本质上是一种播放器状态的切换,它需要前端UI(按钮)来触发,并通过调用组件实例的特定API来实现。

这里有一个关键点容易被忽略:全屏状态的管理是双向的。一方面,用户点击我们的自定义按钮可以进入或退出全屏;另一方面,用户也可能通过设备的物理返回键、手势操作(如iOS的视频播放器手势)来退出全屏。我们的代码必须能妥善处理这两种情况,保持界面状态同步。

另一个核心是 cover-view 的局限性。官方文档会建议在原生组件(如 live-player、camera、map)上使用 cover-view 来覆盖视图。但在全屏场景下,尤其是在部分安卓机型上,cover-view 的层级和事件可能会出现问题。一个更稳妥、兼容性更好的方案是直接使用普通的 view 组件,通过合理的布局和 z-index 控制来实现覆盖,虽然这需要更精细的CSS控制。

注意:放弃 cover-view 意味着你需要更关注层叠上下文和事件冒泡。确保你的控制层 view 不会意外阻挡 live-player 的必要触摸事件(比如一些播放器自带的双击暂停手势)。

2. 构建UI布局:让按钮出现在正确的位置

UI布局的目标是创建一个覆盖在直播画面之上的、非侵入式的控制层。这个层平时隐藏,在用户点击视频区域时显示,其中包含我们的全屏/退出全屏按钮。

我们先来看页面结构(WXML)。这里采用一个包裹层来捕获视频区域的点击事件,用以触发控制层的显示与隐藏。

<!-- pages/live/live.wxml -->
<view class="video-container" bind:tap="toggleControls">
  <live-player
    id="myLivePlayer"
    src="{{liveStreamUrl}}"
    mode="live"
    autoplay
    object-fit="fillCrop"
    bindstatechange="onPlayerStateChange"
    binderror="onPlayerError"
  >
    <!-- 播放器内容区域 -->
  </live-player>

  <!-- 自定义控制层 -->
  <view class="controls-layer" wx:if="{{showControls}}">
    <!-- 全屏按钮,根据当前状态切换图标和功能 -->
    <view class="control-btn fullscreen-btn" bind:tap="toggleFullScreen" catch:tap="stopPropagation">
      <image
        wx:if="{{!isFullScreen}}"
        src="/assets/icons/fullscreen-enter.png"
        class="btn-icon"
      />
      <image
        wx:else
        src="/assets/icons/fullscreen-exit.png"
        class="btn-icon"
      />
    </view>
    <!-- 未来可以在此添加其他按钮,如静音、清晰度切换等 -->
  </view>
</view>

代码解读:

  1. video-container:最外层容器,绑定 toggleControls 方法。点击视频区域任意位置,都会触发控制层的显隐切换。
  2. live-player:核心播放器组件。务必设置 id,以便在JS中通过 wx.createLivePlayerContext 获取实例。object-fit="fillCrop" 可以确保视频在不同屏幕比例下填充显示,全屏时效果更好。
  3. controls-layer:自定义控制层。wx:if 根据 showControls 数据控制显示。这里我们使用普通 view 而非 cover-view。
  4. fullscreen-btn:全屏按钮。图标根据 isFullScreen 状态切换。catch:tap="stopPropagation" 是为了防止按钮的点击事件冒泡到外层的 video-container,导致触发控制层隐藏。

接下来是样式(WXSS)。重点在于让控制层绝对定位,覆盖在播放器之上,并且将按钮定位到右下角。

/* pages/live/live.wxss */
.video-container {
  position: relative;
  width: 100%;
  height: 422rpx; /* 通常直播区域的推荐高度 */
  background-color: #000;
}

/* 控制层样式 */
.controls-layer {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  display: flex;
  align-items: flex-end; /* 垂直方向:底部对齐 */
  justify-content: flex-end; /* 水平方向:右对齐 */
  padding: 20rpx;
  box-sizing: border-box;
  background: linear-gradient(to top, rgba(0,0,0,0.5) 0%, rgba(0,0,0,0) 60%);
  z-index: 99; /* 确保层级高于live-player */
}

/* 全屏按钮样式 */
.fullscreen-btn {
  width: 60rpx;
  height: 60rpx;
  border-radius: 50%;
  background-color: rgba(0, 0, 0, 0.6);
  display: flex;
  align-items: center;
  justify-content: center;
  backdrop-filter: blur(10rpx); /* 毛玻璃效果,增强质感 */
}

.btn-icon {
  width: 36rpx;
  height: 36rpx;
}

布局要点:

  • position: absolute 和 z-index 是让普通 view 覆盖在原生组件上的关键。
  • 使用 linear-gradient 背景营造一个从底部向上的半透明遮罩,既突出了按钮,又不完全遮挡视频内容,提升了设计感。
  • backdrop-filter: blur() 可以为按钮添加iOS风格的毛玻璃效果,但需要注意小程序基础库版本兼容性。

3. 实现核心逻辑:状态管理与API调用

JavaScript部分是我们功能的大脑,负责状态管理和调用 live-player 的API。逻辑主要分为三块:播放器实例的创建、控制层显隐逻辑、全屏切换逻辑。

首先,在页面的 data 中定义我们需要用到的状态变量。

// pages/live/live.js
Page({
  data: {
    liveStreamUrl: 'https://your-live-stream-url', // 直播流地址
    showControls: false, // 控制层是否显示
    isFullScreen: false, // 当前是否处于全屏状态
    playerContext: null, // 存储live-player上下文实例
    controlsTimer: null, // 控制层自动隐藏的计时器
  },

  onLoad: function(options) {
    // 页面加载时创建播放器上下文
    this.initPlayerContext();
  },

  initPlayerContext: function() {
    // 创建并存储 live-player 上下文,方便后续调用
    const playerCtx = wx.createLivePlayerContext('myLivePlayer', this);
    this.setData({ playerContext: playerCtx });
    // 你也可以选择将其挂在到 this 上
    this.playerContext = playerCtx;
  },
})

接下来,实现控制层的交互逻辑。一个好的体验是:点击视频显示控制层,一段时间无操作后自动隐藏。

// 控制层显隐逻辑
toggleControls: function() {
  const { showControls } = this.data;
  // 每次点击视频区域,先清除之前的自动隐藏定时器
  clearTimeout(this.data.controlsTimer);

  if (!showControls) {
    // 如果当前是隐藏状态,则显示
    this.setData({ showControls: true });
    // 并设置一个新的定时器,3秒后隐藏
    const timer = setTimeout(() => {
      this.setData({ showControls: false });
    }, 3000);
    this.setData({ controlsTimer: timer });
  } else {
    // 如果当前是显示状态,则直接隐藏
    this.setData({ showControls: false });
  }
},

// 阻止事件冒泡,用在按钮的catch:tap上
stopPropagation: function() {},

最后,也是最核心的部分:全屏切换。这里需要调用 LivePlayerContext 的 requestFullScreen 和 exitFullScreen 方法。

// 全屏切换逻辑
toggleFullScreen: function() {
  const { isFullScreen, playerContext } = this.data;
  if (!playerContext) {
    console.error('播放器上下文未初始化');
    return;
  }

  if (!isFullScreen) {
    // 进入全屏
    playerContext.requestFullScreen({
      direction: 90, // 设置全屏时屏幕方向,90为竖屏,0为跟随系统
      success: (res) => {
        console.log('进入全屏成功', res);
        this.setData({ isFullScreen: true });
        // 全屏后,可以重置控制层自动隐藏的计时器
        this.resetControlsTimer();
      },
      fail: (err) => {
        console.error('进入全屏失败', err);
        wx.showToast({
          title: '全屏失败',
          icon: 'none'
        });
      }
    });
  } else {
    // 退出全屏
    playerContext.exitFullScreen({
      success: (res) => {
        console.log('退出全屏成功', res);
        this.setData({ isFullScreen: false });
        this.resetControlsTimer();
      },
      fail: (err) => {
        console.error('退出全屏失败', err);
      }
    });
  }
},

// 重置控制层自动隐藏定时器
resetControlsTimer: function() {
  clearTimeout(this.data.controlsTimer);
  if (this.data.showControls) {
    const timer = setTimeout(() => {
      this.setData({ showControls: false });
    }, 3000);
    this.setData({ controlsTimer: timer });
  }
},

关键API解析:

  • requestFullScreen({ direction }): direction 参数非常有用。设置为 90 可以强制在全屏时保持竖屏,这对于直播聊天互动场景是友好的。如果希望横屏全屏观看,可以设置为 0(随系统自动旋转)或 -90/90(强制横屏)。
  • 状态同步:在 success 回调中更新 isFullScreen 是必须的,这确保了我们的UI图标能正确切换。切记不要在调用API前就更新状态,因为API调用可能失败。

4. 处理边界情况与体验优化

基础功能完成后,我们还需要处理一些边界情况,让体验更健壮、更人性化。

情况一:监听系统全屏变化。用户可能通过手机自身的控制条或手势退出全屏,我们的 isFullScreen 状态会因此不同步。我们可以通过监听页面的 onShow 生命周期,或者更精确地,利用 wx.onWindowResize 来检测。

onReady: function() {
  // 监听窗口尺寸变化,用于检测全屏状态变化(部分安卓机有效)
  wx.onWindowResize((res) => {
    const screenWidth = wx.getSystemInfoSync().screenWidth;
    const windowWidth = res.size.windowWidth;
    // 这是一个简单的启发式判断:当窗口宽度接近屏幕宽度时,可能处于全屏
    // 注意:这种方法并不完全可靠,仅供参考
    if (Math.abs(windowWidth - screenWidth) < 10 && !this.data.isFullScreen) {
      console.log('检测到可能进入全屏');
      // 这里可以尝试主动同步一次状态,但更好的方式是通过播放器状态回调
    }
  });
},

更推荐的方式是,如果直播流支持,可以尝试监听播放器本身的状态。但 live-player 目前没有直接的全屏状态变化事件。因此,一个务实的方案是:在 exitFullScreen 的 fail 回调中,如果发现错误码表明已不在全屏,则同步状态。

情况二:全屏下的UI适配。全屏后,我们的控制层按钮位置可能需要微调(例如距离屏幕边缘更远),或者需要隐藏其他页面元素。我们可以利用 isFullScreen 状态动态添加类名。

<!-- 在WXML中 -->
<view class="controls-layer {{isFullScreen ? 'fullscreen-mode' : ''}}" wx:if="{{showControls}}">
/* 在WXSS中 */
.controls-layer.fullscreen-mode {
  padding-bottom: 40rpx; /* 全屏时底部留白更多,避免与手机底部手势条冲突 */
  padding-right: 40rpx;
}

情况三:性能与内存。在 onHide 或 onUnload 页面生命周期中,记得清除定时器,并可以考虑退出全屏,避免后台保持全屏状态。

onUnload: function() {
  // 页面卸载时,清理定时器
  clearTimeout(this.data.controlsTimer);
  const { playerContext, isFullScreen } = this.data;
  // 如果还在全屏状态,尝试退出,避免遗留问题
  if (isFullScreen && playerContext) {
    playerContext.exitFullScreen();
  }
},

进阶优化:手势控制。除了点击,可以尝试监听 touchmove 事件,实现滑动调节亮度、音量的手势(需在全屏模式下,并注意与播放器原生手势的冲突)。

5. 调试技巧与常见问题排查

开发过程中,你肯定会遇到一些问题。这里我总结了一个常见问题排查表,方便你快速定位。

问题现象可能原因排查步骤与解决方案
按钮点击无反应1. 事件绑定错误(用了bindtap但方法是bind:tap)。
2. 按钮被其他元素遮挡。
3. z-index层级过低。
1. 检查WXML中事件名与JS中方法名是否一致。
2. 使用开发者工具的“Wxml”面板,检查元素层级和布局。
3. 确保控制层view的z-index足够高。
全屏API调用失败1. playerContext 未正确初始化或为null。
2. 播放器尚未准备好(state不是playing)。
3. 部分安卓机型兼容性问题。
1. 在调用前打印 this.data.playerContext 确认。
2. 尝试在 bindstatechange 事件中,等到状态为 playing 后再启用全屏按钮。
3. 查看 fail 回调的错误信息,在小程序社区搜索相关错误码。
全屏后控制层消失1. 全屏后页面布局变化,控制层可能被“挤”到不可见区域。
2. 全屏时使用了 cover-view 且兼容性问题。
1. 坚持使用普通 view + position: absolute。
2. 全屏后通过动态类名调整控制层定位(如 top: env(safe-area-inset-top))。
安卓机上样式错乱1. CSS中使用了 rpx,在部分安卓机全屏下计算有差异。
2. 机型特定的CSS兼容性问题。
1. 对于全屏下关键元素的尺寸,可以尝试部分使用 px 单位。
2. 利用 wx.getSystemInfoSync() 获取机型信息,进行条件样式渲染。
退出全屏后页面布局错位页面其他元素样式可能依赖于窗口尺寸,全屏切换后未重绘。在 exitFullScreen 的 success 回调中,尝试触发一个页面的重绘,例如轻微修改一个不相关的数据,或使用 wx.pageScrollTo 滚动0像素。

实用的调试命令: 在开发者工具的Console中,你可以直接获取上下文并测试API:

// 获取当前页面的live-player上下文
const playerCtx = wx.createLivePlayerContext('myLivePlayer');
// 测试进入全屏
playerCtx.requestFullScreen({ direction: 90 });
// 测试退出全屏
playerCtx.exitFullScreen();

6. 从功能实现到体验升华

实现一个能用的全屏按钮只是第一步,要让用户觉得“好用”,我们还需要关注更多细节。视觉反馈至关重要。在点击按钮时,可以添加一个轻微的缩放动画,让用户感知到操作已生效。

.fullscreen-btn:active {
  transform: scale(0.95);
  opacity: 0.8;
  transition: transform 0.1s ease;
}

网络状态与加载处理。在全屏切换时,如果网络不佳,可能会出现黑屏或卡顿。可以考虑在调用全屏API前,检查播放器状态,并在进入/退出全屏时显示一个短暂的加载提示。

toggleFullScreen: function() {
  const { isFullScreen, playerContext, isBuffering } = this.data;
  if (isBuffering) {
    wx.showToast({ title: '正在缓冲,请稍候', icon: 'none' });
    return;
  }
  // ... 原有的全屏逻辑
},

多端一致性测试。这是最后也是最关键的一步。你必须在不同的手机(iOS和不同品牌的安卓机)上进行测试,重点关注:

  1. 全屏/退出动画是否流畅。
  2. 控制层按钮的位置是否与系统手势条(如iPhone的Home Indicator)冲突。
  3. 横竖屏切换时,界面布局是否正常。
  4. 前后台切换(如接电话)后,全屏状态是否恢复正确。

我自己的项目在华为某机型上就遇到过,退出全屏后视频窗口缩回但背景变白的问题。最后发现是页面容器背景色未设置导致的。所以,给所有可能的容器设置明确的背景色,是一个值得养成的好习惯。

把这些细节都考虑到并处理好,你的小程序直播全屏功能就不再是一个冷冰冰的“特性”,而是一个有温度、让人感到顺畅舒适的“体验”。开发的过程,其实就是不断与细节较劲,最终换来用户那一下“嗯,挺顺手”的无感操作。这其中的成就感,远非单纯实现功能可比。

小程序live-player全屏功能自定义实现与优化 本文详细解析了微信小程序live-player组件自定义全屏功能的实现与优化方案。针对官方组件未提供全屏按钮的现状,文章从基础交互搭建入手,提供了完整的WXML结构、WXSS样式与JS逻辑代码,并重点解决了安卓平台下cover-view兼容性差等核心难题。通过优化全屏状态同步、控制栏自动隐藏及防抖处理,确保了功能在iOS与安卓设备上的稳定与流畅体验。 阅读详情

相关推荐

32微信小程序视频播放器全攻略:弹幕+横屏+小窗模式实战详解

手把手教你打造微信小程序多功能视频播放器。支持实时彩色弹幕,具备小窗、横屏自动全屏、投屏、屏幕锁定功能。含完整代码解析,适用于多场景,附可运行示例,助你快速落地 。

前端基地 2935

微信小程序视频全屏显示4种方式

视频全屏显示4种方式 示例库 代码片段

sam的博客 1万+

微信小程序video全屏播放进阶技巧:如何实现点击预览图片、点击视频全屏播放

本文深入探讨了微信小程序中实现图片预览与视频全屏播放的进阶技巧。通过分析image与video组件的核心差异,提供了智能类型识别、统一交互架构的工程实践方案,并详细讲解了视频全屏播放的性能优化、自定义控制界面实现以及全面的错误处理机制,帮助开发者构建流畅的多媒体交互体验。

weixin_29015127的博客 353

优麒麟22.04深度解析:国产Linux开箱即用的底层逻辑

Linux发行版是开源操作系统的核心载体,其选型直接决定开发、教学与办公场景的落地效率。基于Ubuntu LTS的衍生版通过内核复用与生态适配,在稳定性、安全更新和硬件兼容性之间取得平衡;而面向中文用户的深度定制,关键在于系统级locale初始化、原生中文桌面(如UKUI)及预装可信国产应用(WPS、微信Linux版、搜狗输入法)的协同优化。这类发行版的技术价值不仅体现为‘免配置即用’,更在于降低Linux入门门槛、满足等保合规要求,并支撑高校批量部署、政务终端运维与Windows平滑迁移等典型应用场景——

weixin_33871366的博客 393

微信小程序(实现抖音播放效果)上下滑动全屏播放效果

最近项目要做一个类似于抖音的一个视频播放 需要小程序完成 在再次确定了需要这个需求的情况下就开始了(其实因为不是说这个功能不好做主要是但心做出来肯定不流畅 卡顿什么的 优化不好优化) 然后就开始啦 思路使用微信的 swiper 完成竖向滑动 然后分页加载首先先加载一次加载10个当滑动到第7个的时候加载下一页 (要处理自动播放的问题和加载多个有多个同时播放的问题) 效果图 代码 &lt...

baidu_39040364的博客 9522

videoUI视频切换播放和全屏播放微信小程序

videoUI 视频切换播放和全屏播放 微信小程序

如何在微信小程序中实现视频的自动播放功能?

相关资质,如果未上传,您会出现微微信小程序,视频资质、视频播放、视频发布服务包含医疗、外企、政府等等对流程、数据隐私、公司资质等要求极高的客户。承诺:没有广告、没有水印、无捆绑销售。可以通过跳帧的方式来实现微信小程序视频加速播放,也可以使用第三方视频播放插件来实现,例如VideoPlayer插件,可以通过设置speed属性来实现视频播放速度调整。在选择视频时,需平衡视频质量与文件大小,高清晰度视频可提高用户体验,但过大的文件大小可能导致加载时间过长,建议采用适当的视频压缩技术,以优化加载速度与播放质量。

xba668的博客 5148

微信小程序 live-player 全屏播放

微信小程序 live-player 直播全屏播放工具类,对加载状态做了相应判断,并做了相应提示,附件内涵整个模块的全部文件。实际效果参考:https://blog.youkuaiyun.com/qq_15609303/article/details/106596459

微信小程序设置全屏的方法

也许有些人没有发现,其实微信小程序是支持设置为全屏显示的。官方文档上没有直接提出 全屏 这个字眼。但是这个配置属性可以将页面全屏显示:即: navigationStyle: 'custom'不使用官方提供的默认导航栏: 而自己适用背景图或者文档元素自定义制作一个。但是右上角的 ··· 依然会存在,需要保留最基本的功能。...

码在当下的博客 5万+

H2O到OmniH2O细节解读,人形机器人遥操作的技术演进与哲学

摘要:CMU何泰然团队相继发表的H2O和OmniH2O论文为人形机器人遥操作领域带来突破。H2O首创Sim-to-Data方法,通过形态/动作重定向和特权筛选处理人类动作数据,PPO算法实现基础控制。OmniH2O改进为教师-学生蒸馏框架,采用DAgger算法增强泛化能力,并消除对线速度输入的依赖。这两项工作从概念验证到工程落地,建立了一套完整的动作学习范式,为具身智能研究提供了重要参考。

CyanNoah的博客 1393

Jacobi正交多项式在数值分析中的应用与实现

本文深入探讨了Jacobi正交多项式在数值分析中的核心应用与实现。作为最通用的正交多项式族,Jacobi多项式通过参数α和β的调节,可退化为切比雪夫、勒让德等经典多项式,为函数逼近、奇异积分和微分方程求解提供了统一框架。文章重点解析了其在加权高斯积分(高斯-雅可比积分)和谱方法求解微分方程中的关键作用,并提供了基于递归关系和SciPy的稳定高效实现方案,帮助读者掌握这一强大的数值计算工具。

weixin_29306011的博客 246

微信小程序全屏

微信小程序全屏微信小程序全屏的宽度width: 100%;微信小程序全屏的高度height: 100vh;测试代码.myView{ width: 100%; height: 100vh; background: red; }效果图

Markslin的专栏 1万+

万字详解YOLOv8网络结构Backbone/neck/head以及Conv、Bottleneck、C2f、SPPF、Detect等模块

YOLOv8是由Ultralytics开发的最先进的目标检测模型,推升了速度、准确性和用户友好性的界限。YOLO这一缩写代表“你只看一次”(You Only Look Once),通过在一次网络传递中同时预测所有边界框,提升了算法的效率和实时处理能力。相比之下,其他一些目标检测技术需要经过多个阶段或过程来完成检测。YOLOv8在流行的YOLOv5架构上进行了扩展,在多个方面提供了改进。

专注于图像领域,主要研究内容包括计算机视觉和深度学习,特别是在图像分类、目标检测和图像生成等方面有深入的研究和实践经验。 14万+

微信小程序把玩(三十五)Video API

电脑端不能测试拍摄功能只能测试选择视频功能,好像只支持mp4格式,值得注意的是成功之后返回的临时文件路径是个列表tempFilePaths而不是tempFilePath文档写的有点问题。主要属性:wx.chooseVideo(object)成功之后返回参数wxml<button type="primary" bindtap="listenerBtnOpenVideo">打开视频</button> <

FUCK 1万+

从 SM30 到 Fiori:在 SAP BTP ABAP Environment 里创建 Business Configuration 配置维护对象的完整路径

摘要 在SAP BTP的ABAP环境中,传统SAP GUI和SM30配置方式被Business Configuration (BC)替代。BC通过Fiori应用维护配置,支持传输和权限控制。配置表需满足可维护性条件,如允许数据维护、包含技术字段等。通过ADT生成Maintenance Object和Transport Object,实现配置发布与治理。权限管理需创建IAM App和Business Catalog,确保配置可维护。BC在云端延续了可控、可追溯、可发布的治理原则。 (字数:150)

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 243

基于Simulink的超级电容快速响应特性建模与仿真

本文介绍了基于Simulink的超级电容快速响应特性建模与仿真方法。主要内容包括:超级电容的工作原理、一阶RC等效电路模型及其动态电压方程;通过Simulink搭建超级电容模型的两种方法(Simscape Electrical推荐方案和基础模块透明教学方案);仿真100A×100ms放电脉冲下的电压响应特性,并与锂电池进行动态对比;分析超级电容在混合储能系统中的功率分配优势。文章还提供了工程实践要点和扩展方向,如电压均衡、温度影响评估以及与DC-DC变换器集成等。通过建模实践,验证了超级电容在毫秒级响应、高

xiaoheshang_123的博客 98

微信小程序视频全屏播放

微信小程序视频全屏播放 2020/10/22 <button bindtap='play' >播放</button> <video id='myvideo' class='{{fullScreen?"show":"hide"}}' src="视屏地址" autoplay="true" bindfullscreenchange="fullScreen" bindended="closeVideo" controls></video> /**播

巴博尔的学习博客 4387

RTA_OS基础功能讲解 2.6-资源锁和自旋锁

访问需要在任务和 ISR 之间共享的硬件或数据可能不可靠、不安全。这是因为当优先级较低的任务或 ISR 正在更新共享数据时,可能会发生任务或 ISR 抢占。这种情况被称为竞争条件,极难测试。访问共享数据的语句序列称为关键部分。要安全访问关键部分中引用的代码和数据,就需要执行互斥。换句话说,必须确保系统中没有其他任务或第 2 类 ISR 能够在关键部分期间抢占正在执行的任务。你可以将任务声明为非抢占式任务,这样就可以避免互斥问题。

本博客专注于嵌入式软件领域技术分享。 291

微信小程序视频组件控制

自己看微信小程序开发时的一些记录分享。 微信小程序中提供了一个video标签用于视频。已经为我们封装好了视频播放必须的多数功能,包括:暂停/开始,进度条,拖拽进度条,弹幕,全屏播放。 使用时需要编辑wxml与js文件。 wxml文件: 发送弹幕 跳转到50s播放 js文件: function getRandomColor () { let

lzm150的博客 1万+

pyecharts在jupyter notebook中不能够渲染图表问题。

在使用jupyter notebook中使用pyecharts绘制可视化图表的时候,发现图表不能渲染到页面中,生成的html是没问题的,本文主要解决在jupyter notebook中不能渲染这个问题。

猿小白的博客 1169

农业无人机:无人机图像处理_(8).遥感图像处理与分析

遥感图像处理与分析在农业无人机技术中具有重要作用,通过图像预处理、特征提取、分类与分割、目标检测等技术,可以实现对农田的精细管理、作物监测、病虫害预测等应用。本节详细介绍了这些技术的基本概念、常用方法和具体实现,希望对您在农业无人机图像处理方面的学习和应用有所帮助。

zhubeibei168的博客 1336

微信小程序video全屏分分享按钮

1、研究全屏的分享并进行尝试,尝试三种方法,发现了巨巨巨多的坑,坑总结 方法一:cover-view中包裹button和view-image踩坑 (1)cover-view里面包裹button,文档中表示是生效的但是实际上不生效,最后发现button中写字可以实现 (2)cover-view中如果同时包裹button和view-image在ios端会失效,无法实现button的透明化,也无法...

搬砖小鱼,请多指教呦 1149

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

video视频组件-视频切换播放_全屏-微信小程序

videoUI videoUI 视频切换播放和全屏播放 微信小程序 解决痛点: 解决了viode自动下载的bug 加快页面加载速度,为用户节省流量 视频切换播放 解决视频缓存中卡住的问题 腾讯给出的方案是: custom-cache=”{{false}}” 视频全屏播放 解决iPhone X兼容问题 说明: 我们贝壳亲自英语小程序,经过多版本迭代,优...

1万+

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

小程序video全屏不拉伸显示并展示页面按钮

object-fit 当视频大小与 video 容器大小不一致时,视频的表现形式 当时fill时,手机型号不同会出现画面拉伸情况 目前我用的是object-fit=‘cover’

Kf_loseHair的博客 1300

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

微信小程序开发之全屏显示

问题我的小程序只有一个地图,如下代码,但他不是全屏的,&lt;view &gt; &lt;map &gt;&lt;/map&gt; &lt;/view&gt;效果如下:打开控制台进行css控制,但还是不行,所以得控制page。解决控制page,然后在控制子元素也是全屏就解决了。点击查看原文...

qswm_18301240090的博客 1965

微信小程序video控件的使用

微信小程序video控件的使用 微信小程序video控件的使用 一、简介 二、属性 三、相关实现api 1、wx.createVideoContext 2、videoContext对象 四、代码实现 实现效果,如下图 实现原理: 一、简介 video控件是微信小程序提供的系统组件之一,用于实现播放视频的功能。 二、属性 | 属性名 | 类型...

hacjy 4万+
上一篇: RJ45 网口千兆传输速率(1Gbps)背后的物理层与协议协同设计
下一篇: PaddleX实战:用MobileNetV3给电商商品图自动分类(含数据增强技巧)
gitlab7runner
博客等级 码龄4年 78粉丝 1747原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值