H5实例教学--微信内嵌视频2(素材来自腾讯孙尚香末日机甲皮肤宣传H5)

结合之前的两篇解析

微信内嵌视频1(案例浅析)
https://segmentfault.com/a/11...
从AnimateCC到CreateJS入门
https://segmentfault.com/a/11...

这次是一篇createjs完成UI 结合内联视频实现的一个demo

因为忘了原地址所以大家只能自己下demo跑一下简单的效果了

需要简单搭建一个服务器来跑不然createjs对图片资源引用

稍微解析一下总结实现思路

主要是由两个标签实现

video标签实现在手机端内嵌视频播放

canvas标签控制ui层,以及在对UI进行交互时,对视频进行操作

首先将fla文件导出成代码

生成的代码如下:

<script>
var canvas, stage, exportRoot, anim_container, dom_overlay_container, fnStartAnimation;
function init() {
   canvas = document.getElementById("canvas");
   anim_container = document.getElementById("animation_container");
   dom_overlay_container = document.getElementById("dom_overlay_container");
   images = images||{};
   ss = ss||{};
   var loader = new createjs.LoadQueue(false);
   loader.addEventListener("fileload", handleFileLoad);
   loader.addEventListener("complete", handleComplete);
   loader.loadManifest(lib.properties.manifest);
}
function handleFileLoad(evt) {
   if (evt.item.type == "image") { images[evt.item.id] = evt.result; }
}
function handleComplete(evt) {
   //This function is always called, irrespective of the content. You can use the variable "stage" after it is created in token create_stage.
   var queue = evt.target;
   var ssMetadata = lib.ssMetadata;
   for(i=0; i<ssMetadata.length; i++) {
      ss[ssMetadata[i].name] = new createjs.SpriteSheet( {"images": [queue.getResult(ssMetadata[i].name)], "frames": ssMetadata[i].frames} )
   }
   exportRoot = new lib.demo3();
   stage = new createjs.Stage(canvas);
   stage.addChild(exportRoot);
   //Registers the "tick" event listener.
   fnStartAnimation = function() {
      createjs.Ticker.setFPS(lib.properties.fps);
      createjs.Ticker.addEventListener("tick", stage);
   }
   //Code to support hidpi screens and responsive scaling.
   function makeResponsive(isResp, respDim, isScale, scaleType) {
      var lastW, lastH, lastS=1;
      window.addEventListener(‘resize‘, resizeCanvas);
      resizeCanvas();
      function resizeCanvas() {
         var w = lib.properties.width, h = lib.properties.height;
         var iw = window.innerWidth, ih=window.innerHeight;
         var pRatio = window.devicePixelRatio || 1, xRatio=iw/w, yRatio=ih/h, sRatio=1;
         if(isResp) {
            if((respDim==‘width‘&&lastW==iw) || (respDim==‘height‘&&lastH==ih)) {
               sRatio = lastS;
            }
            else if(!isScale) {
               if(iw<w || ih<h)
                  sRatio = Math.min(xRatio, yRatio);
            }
            else if(scaleType==1) {
               sRatio = Math.min(xRatio, yRatio);
            }
            else if(scaleType==2) {
               sRatio = Math.max(xRatio, yRatio);
            }
         }
         canvas.width = w*pRatio*sRatio;
         canvas.height = h*pRatio*sRatio;
         canvas.style.width = dom_overlay_container.style.width = anim_container.style.width =  w*sRatio+‘px‘;
         canvas.style.height = anim_container.style.height = dom_overlay_container.style.height = h*sRatio+‘px‘;
         stage.scaleX = pRatio*sRatio;
         stage.scaleY = pRatio*sRatio;
         lastW = iw; lastH = ih; lastS = sRatio;
      }
   }
   makeResponsive(true,‘height‘,true,1);
   fnStartAnimation();
}
</script>

与上次不同的是 本次发布的代码多了一段自适应屏幕尺寸的代码,这是animateCC2017的新功能

在发布设置中

勾选以上内容,animateCC会生成自适应手机宽高的 页面
ok那么进入正题,需要实现动画和视频的交互,需要在animate的帧中触发一些事件
需要使用到一个createJs的类
EventDispatcher管理队列的事件侦听器和事件分发提供了方法。

var model = new createjs.EventDispatcher();

new 一个实例然后

model.addEventListener("videoPlay1", function () {
    Loop(video, 0)
})

监听某触发的事件
然后用animateCC打开fla文件

打开page1

可以看到在时间轴上我已经加了一些代码片段

右键对应的帧选择动作

/* Mouse Click 事件
单击此指定的元件实例会执行您可在其中添加自己的自定义代码的函数。

说明:
1. 在以下"// 开始您的自定义代码"行后的新行上添加您的自定义代码。
单击此元件实例时,此代码将执行。
*/

this.enter_btn.addEventListener("click", fl_MouseClickHandler.bind(this));

function fl_MouseClickHandler()
{
    // 开始您的自定义代码
    // 此示例代码在"输出"面板中显示"已单击鼠标"。
    console.log(111)
    this.gotoAndPlay(20);
    if(model)model.dispatchEvent("videoPlay1");
    // 结束您的自定义代码
}

在弹窗的动作窗口中 看到已有的代码
这代码需要解释一下
enter_btn这个变量需要自己对某个元素进行命名,这里才能调用到

点击此元素


这个命名需要在该元素第一次出现在时间轴上的那一帧就命名,否则有可能出现无法调用的情况。

那么上面那段代码就是点击 此按钮,跳转到第20帧,并触发"videoPlay1"事件
而我们用刚刚new的时间监听的model类在外部的js监听了这个事件,就可以在对应的地方对视频进行操作了

function Loop(obj, index) {
    if (obj.timer) {
        clearInterval(obj.timer);
    }
    obj.play();
    obj.timer = setInterval(function () {
        var t = obj.currentTime;
        //视频循环时间点
        if (Math.abs(t - videoTimeArr[3 * index + 1]) <= .1) {
            obj.currentTime = videoTimeArr[3 * index];
            // obj.play();
            // clearInterval(obj.timer);
        }
        //动画播放时间点
        if (Math.abs(t - videoTimeArr[3 * index + 2]) <= .1) {
            playAnimate(index);
        }
    }, 20);
}

将视频对象传入,并开启一个定时器,判断视频进度是否达到我们需要的循环点,如果到了则回到初始点循环播放
后面还有一个地方,有个返回按钮,而按钮也有对应的返回的视频片段,在点击返回时播放对应视频片段,并回到目标时间点

function unloop(obj, index) {
    if (obj.timer) {
        clearInterval(obj.timer);
    }
    obj.currentTime = videoBackwardTimeArr[3 * index];
    obj.play();
    obj.timer = setInterval(function () {
        var t = obj.currentTime;
        if (Math.abs(t - videoBackwardTimeArr[3 * index + 1]) <= .1) {
            obj.currentTime = videoBackwardTimeArr[3 * index + 2];
            obj.play();
            Loop(obj, 0)
            var view = stage.children[0].view;
            view.gotoAndStop(29)
        }
    }, 20);
}

下面附demo代码,谢谢

链接: http://pan.baidu.com/s/1mijrS7Y 密码: pth1

本文转载于:猿2048?https://www.mk2048.com/blog/blog.php?id=hhii2kb1bbb

原文地址:https://www.cnblogs.com/homehtml/p/12543499.html

时间: 2024-10-13 00:20:59

H5实例教学--微信内嵌视频2(素材来自腾讯孙尚香末日机甲皮肤宣传H5)的相关文章

wap网页、微信内嵌网页在手机端页面窗口尺寸如何不缩放

如何让wap网页.微信内嵌网页内容(尺寸和文字)在手机端页面窗口尺寸不被强制缩放 在head中加入: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" /> <meta name="

微信内嵌浏览器如何直接打开外部浏览器下载APP(APK)

想必大家会经常碰到网页链接在微信内无法打开和微信内无法打开app下载页的情况.通常这种情况微信会给个提示 “已停止访问该网址” ,那么导致这个情况的因素有哪些呢,主要有以下四点 1.网页链接被举报次数过多.2.网页含违规内容,含敏感词.3.被腾讯检测系统判断为诱导分享内容.4.转发分享次数达上限 那么上述问题怎么办呢?只要我们实现微信跳转浏览器的功能即可. 功能目的 生成微信跳转链接,实现微信内置浏览器跳转外部浏览器打开网页. 功能效果 对网页所属的PHP代码进行相关处理,加入跳转接口即可实现.

关于微信H5支付(微信内支付 和 跳连接支付)

好久没有更新博客,最近做项目遇到了微信支付,整理一下需求,目的一个活动页面需要调微信支付!应用框架THINKPHP5.1 注意:微信支付 需要注意 如果是h5页面调取支付的话,需要静默一个登录状态获取code,这样才可以保证支付调取的参数openid正常,这里的坑填了好久,微信内浏览器h5用户输入完手机号登录后,页面存cookie信息,有时候会不更新获取的openid 导致"下单账号和支付账号不一致,请核对": 微信内浏览器刷新页面用jq执行: window.location.href

判断是否来自微信内置浏览器还是不是来自微信内置浏览器

function isWeiXin() { var ua = window.navigator.userAgent.toLowerCase(); // console.log(ua);//mozilla/5.0 (iphone; cpu iphone os 9_1 like mac os x) applewebkit/601.1.46 (khtml, like gecko)version/9.0 mobile/13b143 safari/601.1 if (ua.match(/MicroMess

微信内嵌H5网页 解决js倒计时失效

项目要求:将H5商城页面嵌套到公司微信公众号里 项目本身的开发跟移动端网页并无太多差异,只是这昨天遇到一个问题,说是棘手,到也简单. 用户下单后,在选择支付方式页面,有个倒计时的逻辑(从下单时开始计算,24小时后未支付,会有ws自动取消这个订单),js代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 <script type="text/javascript"><br>  var 

解决微信内嵌浏览器无法响应上传文件(图片)的思路(2种办法)

进园一年多来,第一次写博客,好激动.原因主要是自己平时都是有写笔记,不习惯写博客,这次想写博客的原因是,这个问题确实我做了很久,已经做了近两周才解决了这个问题,,而且两周时间里尝试过了很多种办法,然后由于网上又没有多少人分享这个,决定自己写一下. 先自我介绍下,我是惠州学院大二(准大三)的学生,在去年暑假时候加了一个工作室开始写代码,也是在那个时候加入博客园,最近因为工作室要做微信端网页的开发需要一个上传图片功能,然后编码的时候发现用平时的方法做的上传功能在Android的微信端上实现不了,百度

PPT内嵌视频(指发布时只需要ppt一个文件即可)

做实验时用手机拍了视频,想把视频嵌入到PPT中.只是单纯的嵌入很容易,但是我想将PPT推送给其他人时,不需要再传视频文件.搜了一下做法,可以通过flash视频格式实现.电脑为thinkpad笔记本,win7-64,安装了office2013.操作步骤如下: 1.用format factory将.mp4文件转换为.swf文件. 2.打开ppt,设置如下:文件->选项 3. 在工具栏中,做如下选择 4.此时鼠标变为十字形,在PPT上画出一个区域,然后右键,选择属性,做如下配置即可 5.PPT放映时,

微信内嵌浏览器自动打开手机系统浏览器(手机默认浏览器)

最近在做一个项目,有一项功能是从微信中的分享页或者产品推广页面中下载app:在微信中直接下载app时微信是"拒绝"的,所以一般的做法是点击下载按钮弹出遮罩层,提示在浏览器中打开,然后进入外部浏览器,再次点击下载按钮进行下载,这种做法虽然能够实现下载的功能,但是这么长的操作非常容易导致潜在用户的流失. 那么最好的方法当然是在微信中点击下载按钮就能进入下载页(android可以跳至手机浏览器下载,ios则直接打开appstore). 这个技术似乎有些产品已经实现了,实现方式: 月牙跳转是一

javascript判断是否是微信内嵌浏览器访问

function isWeiXin(){ var ua = window.navigator.userAgent.toLowerCase(); if(ua.match(/MicroMessenger/i ) == 'micromessenger' ){ return true; } else{ return false; } } 原文地址:https://www.cnblogs.com/light-zhang/p/8443962.html