首页 > 其他分享 >奖励弹窗 svga 播放

奖励弹窗 svga 播放

时间:2024-07-18 14:18:07浏览次数:10  
标签:播放 setAttribute item video let svga document 弹窗

html

<script src="./js/svga.min.js"></script>

js

// svga 展示
function fn_svgaPlay(item) {

    //  // mp4
    // item = {
    //     "gift_id": 11078,
    //     "img": "https://image.whoisamy.shop/attachment/2024/06/27/8755eae77474c3f52f0c95aec30bb77e6b5c1f9f.png",
    //     "prop_name": "LV4座驾-7月首充",
    //     "svga_path": "https://image.whoisamy.shop/action/commonPics/public/mp4/gift_id_11078.mp4",
    //     "svga_model": "full",
    //     "canvasClass": "center",
    //     "text": "Mounts",
    //     "days": 15,
    //     "worth": 205000,
    //     "mp4_url": "https://image.whoisamy.shop/action/commonPics/public/mp4/gift_id_11078.mp4",
    //     "file_suffix": "mp4"
    // }


    //  // svga
    // item = {
    //     "gift_id": 11077,
    //     "img": "https://image.whoisamy.shop/attachment/2024/06/27/349ba92deac2970cfaabb88fb199cbae32ec00ad.png",
    //     "prop_name": "LV3座驾-7月首充",
    //     "svga_path": "https://image.whoisamy.shop/attachment/2024/06/27/11be08e5ed62c648abaf1208b6135bb5a37a813a.svga",
    //     "svga_model": "full",
    //     "canvasClass": "center",
    //     "text": "Mounts",
    //     "days": 15,
    //     "worth": 105000,
    //     "svga_type": "default"
    // }

    // // img
    // item = {
    //     "img": "https://image.whoisamy.shop/action/commonPics/public/VIP5.png",
    //     "text": "VIP5",
    //     "days": 7,
    //     "worth": 140000
    // }



    if (!item.img) return
    // 
    let body = document.body
    body.style.overflow = 'hidden'

    // 
    svga_mark.addEventListener('click', function () {
        body.style.overflow = 'auto'
        svga_mark.remove()
    })

    // svga_mark
    let svga_mark = document.createElement('div')
    svga_mark.classList.add('svga_mark')
    body.append(svga_mark)

    // svga_cont
    let svga_cont = document.createElement('div')
    svga_cont.classList.add('cont')
    svga_mark.append(svga_cont)

    // 判断类型
    let file_type = ''
    if (item.svga_path || item.svga) {
        if (item.svga && !item.svga_path) { item.svga_path = item.svga }
        if (item.svga_path.includes('.mp4')) { file_type = 'mp4' }
        if (item.svga_path.includes('.svga')) { file_type = 'svga' }
    } else {
        file_type = 'img'
    }

    // 视频
    if (file_type == 'mp4') {
        // videoMark
        let videoMark = document.createElement('div')
        videoMark.classList.add('videoMark')
        svga_mark.append(videoMark)

        // 判断设备
        var u = navigator.userAgent;
        var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1;
        //android终端
        var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/);
        if (isiOS) videoMark.classList.add('ios')

        // video
        let video = document.createElement('video')
        video.classList.add('video')
        video.setAttribute('id', 'video')
        video.setAttribute('loop', 'loop')
        video.setAttribute('muted', 'muted')
        video.setAttribute('autoplay', 'autoplay')
        video.setAttribute('preload', 'auto')
        // video.setAttribute('controls','controls')
        video.setAttribute('controlslist', 'nodownload')
        video.setAttribute('playsinline', 'playsinline')
        video.setAttribute('mult', 'mult')
        video.setAttribute('x5-video-player-type', 'h5')
        video.setAttribute('x5-video-player-fullscreen', 'true')
        video.setAttribute('width', '100%')
        video.setAttribute('height', '100%')
        video.setAttribute('poster', 'https://image.whoisamy.shop/action/commonPics/public/bg_opacity_0.png')
        video.setAttribute('src', item.svga_path)
        videoMark.append(video)

        // 
        let close = document.createElement('div')
        close.classList.add('colse')
        videoMark.append(close)


    }

    // 动效
    if (file_type == 'svga') {
        svga_cont.classList.add(item.svga_model || '')

        let cbox = document.createElement('div')
        cbox.classList = 'cbox svga'
        svga_cont.append(cbox)

        let svga_box = document.createElement('div')
        svga_box.setAttribute('id', 'svga_box')
        svga_box.classList.add('svga_box')
        svga_box.classList.add(item.canvasClass || '')
        svga_box.style.textAlign = 'left'
        cbox.append(svga_box)

        setTimeout(() => {
            svga_load('svga_box', item.svga_path);
        }, 300);

    }

    // 图片
    if (file_type == 'img') {
        // svga_pic
        let picBox = document.createElement('div')
        picBox.classList = 'cbox pic'
        svga_cont.append(picBox)

        // img
        let img = document.createElement('img')
        img.src = item.img
        picBox.append(img)
    }

    // 
}

// svga_load
function svga_load(id, svga_url) {
    createLoad()
    var player = new SVGA.Player(`#${id}`);
    var parser = new SVGA.Parser(`#${id}`); // Must Provide same selector eg:#demoCanvas IF support IE6+
    parser.load(svga_url, function (svgaItem) {
        removeLoad()
        // player.loops = 1; //必须放最上面,执行次数,默认无限循环
        player.setVideoItem(svgaItem);
        player.startAnimation();
        player.onFinished(function () {
            console.log('加载完成!');
        });
    });
}

function createLoad() {

    let div = document.createElement('div');
    div.id = 'requestLoad';
    div.style.cssText=`width: 100%;height: 100%;position:fixed; top: 0;left: 0;z-index: 100;`

    let box = document.createElement('div');
    box.id = 'load_box';
    box.style.cssText=`width: 2rem;height: 2rem;border-radius: .2rem;position:absolute;top: 50%;left: 50%;transform: translate(-50%,-50%);z-index: 100;display: flex;align-items: center;justify-content: center;background-color: rgba(0, 0, 0, .3);`
    div.append(box);

    let reul = document.createElement('ul');
    reul.id = 'reul';
    reul.style.cssText = `width: .8rem;height: .8rem;position: absolute;animation: rotate 2s linear infinite;`

    let num = 8
    for (let i = 0; i < num; i++) {
        let li = document.createElement('li')
        li.style.cssText = `width: 100%; height: .1rem; position: absolute; left: 50%; top: 50%; transform: translate(-50%,-50%)  rotateZ(${1 / num * 360 * i}deg) ;`
        let span = document.createElement('span')
        span.style.cssText = `display: block; width: .24rem; height: .24rem; background: #fff; border-radius: 50%; position: absolute; left: 0; top: 50%; transform: translate(-50%,-50%) scale(${1 - i * .064});`
        li.append(span);
        reul.append(li);
    }

    box.append(reul);
    document.querySelector('body').appendChild(div)

}


function removeLoad() {

    var removeLoad = document.getElementById('requestLoad');
    if (removeLoad) {
        removeLoad.remove();

    }

}

标签:播放,setAttribute,item,video,let,svga,document,弹窗
From: https://www.cnblogs.com/janty/p/18309410

相关文章

  • uniapp [全端兼容] - 详细实现接入使用海康威视监控云端显示及控制功能,网站集成安装海
    前言如果需要Vue版本,请访问这篇文章。在uni-app全平台兼容(H5网页网站、支付宝/微信小程序、安卓App、苹果App、nvue)项目开发中,详解免费安装使用“海康威视监控摄像头”在网页中对接设备并进行实时显示监控画面及各种功能操作控制教程,对接海康视频监控播放及回放......
  • OpenHarmony 播放器播放本地文件的管道流程图
    一、管道流程图GStreamer可以输出dot文件,这些dot文件详细描述了管道的拓扑结构以及插件的连接和协商的能力集等。下面是OpenHarmony标准系统基于gstreamer引擎的AVPlayer播放器播放本地mp4文件时从暂停态切换到运行态生成的管道流程图。注:因图片过长,只截取了部分重要插......
  • JS 实现在指定的时间点播放列表中的视频
     为了实现在指定的时间点播放列表中的视频,你可以使用JavaScript中的setTimeout或setInterval结合HTML5的<video>元素。但是,由于你需要处理多个时间点,并且每个时间点播放不同的视频,使用setTimeout会更直接一些,因为你可以为每个时间点设置一个独立的定时器。以下是一个基本的实......
  • 基于M3u8的视频加密及播放
    准备工作安装ffmpeg  mac安装brewinstallffmpeg 加密准备生成enc.keyopensslrand16>enc.key(生成一个enc.key文件)生成ivopensslrand-hex16(生成一段字符串,记下来)新建一个文件enc.keyinfo内容格式如下:KeyURI#enc.key的路径......
  • 新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?
    H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器,可支持多种流媒体协议播放,支持H.264与H.265编码格式,性能稳定、播放流畅;支持WebSocket-FLV、HTTP-FLV,HLS(m3u8)、WebRTC、WS-FMP4、HTTP-FMP4等格式的视频流,并且已实现网页端实时录像、在iOS上实现低延时......
  • uniApp 接入微信短剧播放器
    短剧播放器是微信官方为微短剧类目小程序提供的播放器插件。开发者可引入短剧播放器插件后,基于自身需求快速进行开发上线。 小程序中使用短剧播放器需要以下几个条件小程序已有短剧类目(文娱->微短剧),并且将该类目设为主类目小程序引入短剧播放器插件   微信官方短剧......
  • 安防视频监控EasyCVR平台浏览器http可以播放,https不能播放,如何解决?
    安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T28181协议、部标JT808、GA/T1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等。平台能对外分发RTMP、RT......
  • webrtc-streamer实时播放监控
    公司要做web端监控实时播放,经过调研,webrtc-streamer的方式对前后端项目侵入最少,且没有延迟卡钝的现象。一、准备工作一个摄像头,摄像头对应的rtsp流链接,一台电脑,一个vue项目。二、Webrtc-streamer安装及启动教程 1、下载安装包下载地址:https://github.com/m......
  • Python学习笔记36:进阶篇(二十五)pygame的使用之事件监听控制切歌和暂停,继续播放
    前言基础模块的知识通过这么长时间的学习已经有所了解,更加深入的话需要通过完成各种项目,在这个过程中逐渐学习,成长。我们的下一步目标是完成pythoncrashcourse中的外星人入侵项目,这是一个2D游戏项目。在这之前,我们先简单学习一下pygame模块。私信我发送消息python资料,......
  • ts vue3 element-plus 自建可配置表单弹窗实现
    当然可以!下面是使用TypeScript语法的动态表单弹出组件示例。1.创建动态表单弹出组件(TypeScript)<template><el-dialog:visible.sync="visible"title="表单"@close="handleClose"><el-form:model="formData":rules="rules"......