先看看大概效果
1.首先需要了解微信API:         

wx.createIntersectionObserver(Object component, Object options)

创建并返回一个 IntersectionObserver 对象实例。在自定义组件或包含自定义组件的页面中,应使用 this.createIntersectionObserver([options]) 来代替

具体可以看微信小程序文档

2.由于我们这个区域是一个滚动区域,所以我用了scoll-view,最外层用scroll-view包裹

  直接封装一个组件

 player.js

// pages/text/play.js
const app = getApp()
Component({
/**
* 组件的属性列表
*/
properties: {
index: {
type: Array,
value: []
}
},
ready() { },
attached() {
// 获取随机数字 给video标签id命名 可使用时间戳
var random = Math.floor(Math.random() * 1000);
// 全局获取 屏幕高度宽度
var { screenHeight, screenWidth } = app.globalData.systemInfo
this.setData({
screenHeight,
screenWidth,
random
})
var that = this
var screenHeight = screenHeight //获取屏幕高度 var screenWidth = screenWidth //获取屏幕宽度 let topBottomPadding = screenHeight / 2
// 获取试图目标元素
const videoObserve = wx.createIntersectionObserver(this)
// 设置试图可见区域
this.observe = videoObserve.relativeToViewport({ top: -topBottomPadding + 10, bottom: -topBottomPadding }) // // 暂存随机
var random = that.data.random
this.observe.observe(`#vids${that.data.random}`, (res) => {
let { intersectionRatio } = res
// var videoNow = wx.createVideoContext(res.id,that)
if (intersectionRatio > 0) {
//离开视界,因为视窗占比>0,开始播放 // that.setData({ // playstart: true // })
//进入视界,开始播放
console.log('start',res);
wx.createVideoContext(res.id,that).play()
wx.createVideoContext('vids',that).play()
// that.observe.disconnect() } else {
// 离开试图 暂停播放
console.log('stop',res);
wx.createVideoContext('vids',that).pause() wx.createVideoContext(res.id,that).pause()
// that.observe.disconnect()
// that.setData({ // playstart: false // })
}
}) }, /**
* 组件的初始数据
*/
data: {
list: [],
playstart: false,
screenHeight: "",
screenWidth: "",
random: '',
}, /**
* 组件的方法列表
*/ onShow() { },
methods: { }
})

player.wxml

<view class="box" hover-class="none">
<view class="">
<video class="vids" id="vids{{random}}" data-index='{{index}}' src="http://wxsnsdy.tc.qq.com/105/20210/snsdyvideodownload?filekey=30280201010421301f0201690402534804102ca905ce620b1241b726bc41dcff44e00204012882540400&bizid=1023&hy=SH&fileparam=302c020101042530230204136ffd93020457e3c4ff02024ef202031e8d7f02030f42400204045a320a0201000400"></video>
</view>
</view>

大概实现功能,可以自己设置

最后在自己想用的地方映入组件即可

微信小程序实现滚动视频自动播放(未优化)的更多相关文章

  1. 微信小程序-通知滚动小提示

    代码地址如下:http://www.demodashi.com/demo/14044.html 一.前期准备工作 软件环境:微信开发者工具 官方下载地址:https://mp.weixin.qq.co ...

  2. 微信小程序video组件出现无法播放或卡顿

    微信小程序使用video组件播放视频的时候,会出现卡顿或者无法播放的问题,加一个custom-cache=”true“即可解决,这个属性文档上没有,是从小程序开发社区中get到的.

  3. 微信小程序scroll-view滚动一次多次触发的问题解决方案

    最近使用微信小程序开发的时候,需要用scroll-view的bindscrolltolower事件,控制加载下一页的内容.但是发现在ios里,下拉滚动一次,事件触发两次,导致重复加载数据. 经过百度和 ...

  4. 微信小程序首支视频广告片发布

    自2017年1月9日上线以来,微信小程序瞬间引爆网络,又迅速归于平静.对这个“无需安装.触手可及.用完即走.无需卸载”的小程序,微信从一开始就对它寄予了无限期望.在公布一系列规则更改后,微信小程序终于 ...

  5. 利用机器学习实现微信小程序-加减大师自动答题

    之前有看到微信小程序<跳一跳>别人用python实现自动运行,后来看到别人用hash码实现<加减大师>的自动答题领取娃娃,最近一直在研究深度学习,为啥不用机器学习实现呢?不就是 ...

  6. 关于微信小程序爬虫关于token自动更新问题

    现在很多的app都很喜欢在微信或者支付宝的小程序内做开发,毕竟比较方便.安全.有流量.不需要再次下载app,好多人会因为加入你让他下载app他会扭头就走不用你的app,毕竟做类似产品的不是你一家. 之 ...

  7. 微信小程序发布新版本时自动提示用户更新

    如图,当小程序发布新的版本后,用户如果之前访问过该小程序,通过已打开的小程序进入(未手动删除),则会弹出这个提示,提醒用户更新新的版本.用户点击确定就可以自动重启更新,点击取消则关闭弹窗,不再更新. ...

  8. 微信小程序bnner滚动

    首先是轮播图,autoplay 自动播放,interval 轮播的时间,duration 切换速度,可以根据自己需求去添加. Delete:是删除按钮,加载进来是隐藏的,需用户点轮播图进去后,轮播图全 ...

  9. 微信小程序—picker(滚动选择器)

    官方api:https://mp.weixin.qq.com/debug/wxadoc/dev/component/picker.html 上边是官网的api.小程序中,底部下拉滚动选择主要有这几种 ...

随机推荐

  1. GIT pull 如何解决 fatal: refusing to merge unrelated histories

    在Github新建一个仓库,写了Readme.md,然后把本地一个已有内容的仓库上传. 先pull,因为两个仓库不同,发现refusing to merge unrelated histories,无 ...

  2. 补充的javascript 数据类型笔记

        <p> 变量名命名规范</p>     由字母,数字,下划线,$组成     严格区分大小写 var app和var App 是两个变量     变量名不能以数字开头 ...

  3. JavaScript 模块封装

    JavaScript 模块封装 前言介绍 在最早的时候JavaScript这门语言其实是并没有模块这一概念,但是随着时间的推移与技术的发展将一些复用性较强的代码封装成模块变成了必要的趋势. 在这篇文章 ...

  4. 2020重新出发,JAVA入门,关键字&保留字

    关键字 & 保留字 关键字(或者保留字)是对编译器有特殊意义的固定单词,不能在程序中做其他目的使用. 关键字具有专门的意义和用途,和自定义的标识符不同,不能当作一般的标识符来使用.例如, cl ...

  5. TCP学习指北

    限于博主水平有限不敢说指南,但应该能够避免刚学TCP的同学出现找不着北的情况. TCP与UDP的区别 区别: UDP是无连接的,而TCP是面向连接的,传数据前要先建立连接. UDP可以一对多,多对多通 ...

  6. Linux学习日志第一天——基础命令①

    文章目录 前言 命令的作用及基本构成 关于路径 命令 ls (list) 命令 pwd (print working directory) 命令cd (change directory) 命令 mkd ...

  7. 【Spring注解驱动开发】使用@Autowired@Qualifier@Primary三大注解自动装配组件,你会了吗?

    写在前面 [Spring专题]停更一个多月,期间在更新其他专题的内容,不少小伙伴纷纷留言说:冰河,你[Spring专题]是不是停更了啊!其实并没有停更,只是中途有很多小伙伴留言说急需学习一些知识技能, ...

  8. GaussDB基本操作

    列出所有数据库 \l 切换数据库 \c ${databaseName} 列出当前数据库下的表 \d 列出表的所有字段 \d ${tableName} 查看指定表的基本情况 \d+ ${tableNam ...

  9. 区分多个web driver实例

    固然可以用加载不同cookie的办法,让3个帐号共享一个web driver登陆,但总感觉切换麻烦,干脆用了3个web driver实例.问题来了,如何区分?不是说程序里如何区分,机器比人聪明,知道外 ...

  10. Typescript node starter 2.Router Middleware

    Router 路由器对象是中间件和路由的一个独立实例.可以将它视为一个“迷你应用程序”,仅能够执行中间件和路由功能.每个Express应用程序都有一个内置的应用程序路由器. 路由器的行为类似于中间件本 ...