egret结合html标签,egret的WebView实现
#需求 在egret中嵌入网页,类似
。
网上大概有两种思路吧,一种是直接在body里面加入iframe,如:【Egret】里使用iframe标签达到内嵌多个web界面;另一种就是通过模仿htmlinput来做,如egret的WebView实现。具体要什么样子看需求吧。
Egret由两个层组成,简单看一个页面:
id为“canvasDiv的DIV”层是一个canvas,主要用于文字、位图、矢量图等的渲染,id为“StageDelegateDiv”的层是使用HTML原生的输入文本组件,如下图:
输入文本这块有不少坑,比如焦点啥的
最终代码如下:
/**
* WebView
* 适配FIXED_WIDTH、FIXED_HEIGHT、NO_BORDER、SHOW_ALL四种缩放模式
* 暂未考虑屏幕大小改变、屏幕旋转以及单页面多Webplay实例的情形
* Created by yxiao on 2015/9/30.
*/
class WebView extends egret.DisplayObjectContainer {
private _x:number=0;
private _y:number=0;
private _width:number=0;
private _height:number=0;
private _src:string="";
private _scaleMode:string=egret.MainContext.instance.stage.scaleMode;
private _stageW:number;
private _stageH:number;
private _windowW:number;
private _windowH:number;
private _displayH:number;
private _displayW:number;
private _designH:number;
private _designW:number;
private _iframeWrapper:HTMLDivElement=null;
private _iframe:HTMLIFrameElement=null;
/**
* @param src
*/
public constructor(src:string){
super();
var stageDelegateDom:HTMLElement=document.getElementById("StageDelegateDiv"),playerContainer:HTMLElement=stageDelegateDom.parentElement;
var iframeWrapperDom=document.getElementById("iframe-wrapper");
if(!iframeWrapperDom){
iframeWrapperDom=document.createElement("div");
iframeWrapperDom.style.display="none";
iframeWrapperDom.attributes['style'].value+='position:absolute;-webkit-overflow-scrolling: touch;overflow-y: scroll;';//解决iframe在ios下的显示问题
iframeWrapperDom.id="iframe-wrapper";
stageDelegateDom.appendChild(iframeWrapperDom);
}
this._iframeWrapper=iframeWrapperDom;
this._iframeWrapper.style.display="none";
this._iframeWrapper.style.opacity="0";
var iframe = document.createElement("iframe"),t=new Date().getTime();
iframe.src=src;
iframe.id="webview-iframe-"+t;
iframe.name="webview-iframe-"+t;
iframe.style.position="absolute";
iframe.style.top="0";
iframe.style.left="0";
iframe.style.opacity="0";
iframe.style.display='none';
iframe.frameBorder='0';
iframe.border="0";
this._iframeWrapper.appendChild(iframe);
this._iframe=document.getElementById("webview-iframe-"+t);
var self=this;
this._iframe.οnlοad=function(){
self._iframeWrapper.style.opacity="1";
self._iframe.style.opacity="1";
}
this._stageW=egret.MainContext.instance.stage.stageWidth;
this._stageH=egret.MainContext.instance.stage.stageHeight;
this._windowW=window.innerWidth;
this._windowH=window.innerHeight;
this._designH=parseInt(playerContainer.attributes['data-content-height'].value);
this._designW=parseInt(playerContainer.attributes['data-content-width'].value);
var stageSize = egret.sys.screenAdapter.calculateStageSize(egret.MainContext.instance.stage.scaleMode, this._windowW, this._windowH, this._designW, this._designH);
this._displayH=stageSize.displayHeight;
this._displayW=stageSize.displayWidth;
console.log("windowW:"+this._windowW);
console.log("stageW:"+this._stageW);
console.log("disPlayW:"+this._displayW);
console.log("windowH:"+this._windowH);
console.log("stageH:"+this._stageH);
console.log("displayH:"+this._displayH);
}
public show():void {
this._iframe.style.display='block';
this._iframeWrapper.style.display='block';
}
public destroy():void {
if(this._iframe){
this._iframeWrapper.style.display="none";
this._iframeWrapper.removeChild(this._iframe);
}
}
public get width():number {
return this._width;
}
public set width(value:number) {
this._width = value;
if(this._scaleMode==egret.StageScaleMode.FIXED_WIDTH || this._scaleMode==egret.StageScaleMode.FIXED_HEIGHT ){
this._iframe.width=this._width/this._stageW*this._windowW+"px";
this._iframeWrapper.style.width=this._width/this._stageW*this._windowW+"px";
}
if(this._scaleMode==egret.StageScaleMode.SHOW_ALL || this._scaleMode==egret.StageScaleMode.NO_BORDER ) {
if(this._windowW==this._displayW){
this._iframe.style.width = this._width / this._stageW * this._windowW + "px";
this._iframeWrapper.style.width = this._width / this._stageW * this._windowW + "px";
}else{
this._iframe.style.width = this._width / this._stageW * this._displayW + "px";
this._iframeWrapper.style.width = this._width / this._stageW * this._displayW + "px";
}
}
}
public get height():number {
return this._height;
}
public set height(value:number) {
this._height = value;
if(this._scaleMode==egret.StageScaleMode.FIXED_WIDTH || this._scaleMode==egret.StageScaleMode.FIXED_HEIGHT ) {
this._iframe.height=this._height/this._stageH*this._windowH+"px";
this._iframeWrapper.style.height=this._height/this._stageH*this._windowH+"px";
}
if(this._scaleMode==egret.StageScaleMode.SHOW_ALL || this._scaleMode==egret.StageScaleMode.NO_BORDER ) {
if(this._windowH==this._displayH){
this._iframe.style.height = this._height / this._stageH * this._windowH + "px";
this._iframeWrapper.style.height = this._height / this._stageH * this._windowH + "px";
}else{
this._iframe.style.height = this._height / this._stageH * this._displayH + "px";
this._iframeWrapper.style.height = this._height / this._stageH * this._displayH + "px";
}
}
}
public set x(value:number) {
this._x = value;
if(this._scaleMode==egret.StageScaleMode.FIXED_WIDTH || this._scaleMode==egret.StageScaleMode.FIXED_HEIGHT) {
this._iframeWrapper.style.left = this._x / this._stageW * this._windowW + "px";
}
if(this._scaleMode==egret.StageScaleMode.SHOW_ALL || this._scaleMode==egret.StageScaleMode.NO_BORDER ) {
if(this._windowW==this._displayW){
this._iframeWrapper.style.left = this._x / this._stageW * this._windowW + "px";
}else{
this._iframeWrapper.style.left = this._x / this._stageW * this._displayW + "px";
}
}
}
public set y(value:number) {
this._y = value;
if(this._scaleMode==egret.StageScaleMode.FIXED_WIDTH || this._scaleMode==egret.StageScaleMode.FIXED_HEIGHT ) {
this._iframeWrapper.style.top = this._y / this._stageH * this._windowH + "px";
}
if(this._scaleMode==egret.StageScaleMode.SHOW_ALL || this._scaleMode==egret.StageScaleMode.NO_BORDER){
if(this._windowH==this._displayH){
this._iframeWrapper.style.top = this._y / this._stageH * this._windowH + "px";
}else{
this._iframeWrapper.style.top =this._y / this._stageH * this._displayH + "px";
}
}
}
public get x():number {
return this._x;
}
public get y():number {
return this._y;
}
public get src():string {
return this._src;
}
public set src(value:string) {
this._src = value;
}
}
egret结合html标签,egret的WebView实现相关推荐
- H5游戏引擎为什么选择egret和怎么学习egret
市面上有很多H5游戏引擎,国外的H5游戏引擎数不胜数,而国内较成熟的H5游戏引擎就是cocos2d-js.layabox还有今天的主题egret.为什么我要用egret白鹭引擎?因为相比于国内的另外两 ...
- egret php跨域,Egret问题总结
1.使用EUI的项目发布到微信小游戏自定义皮肤组件找不到 在所有EUI皮肤类底部追加: window["类名"] = 类名; 比如Alert皮肤类 window["A ...
- 白鹭引擎生成html,初识Egret白鹭引擎 之 创建舞台
简述 随着Html5游戏的逐渐普及,了解一款开发引擎,对于开发者是很有帮助的.目前国内比较流行的html5游戏引擎有:cocosCreator.Egret.Laya.今天就给大家详细介绍下当前比较流行 ...
- 白鹭php源码,egret 2D引擎源码分析(二) 创建播放器
本帖最后由 fightingcat 于 2016-7-16 00:26 编辑 上一篇讲到了引擎的入口runEgret为每一个播放器标签(就是index.html中看到的那个 之前web.WebPlay ...
- Egret QQ玩一玩适配【踩坑日记】
需要申明一点,这是我接过最坑的渠道了,各种神奇的问题,首先是接口比较奇怪而且新旧版本搞得很混乱,其次是平台底层实现性能差而且很多限制.此外,这里需要理清楚一个概念:QQ 玩一玩 和 QQ 玩吧 并非同 ...
- h5小游戏嵌入到微信小游戏中(以egret为例)
H5小游戏源代码不能直接转换为微信小游戏发布,但是可以把现有的h5小游戏嵌入到微信小游戏中,这里使用egret举例.使用egret创建一个空的微信小游戏,在main.ts中资源加载完成后执行Webvi ...
- Egret之MC逐帧动画
此处Egret逐帧动画借助Flash以及Texture Merger工具来生成文件( 1:动画描述文件Json , 动画图集文件 ) 本人以一只飞行的鸟为例 先看Flash , 如下 flash的项目 ...
- Egret游戏手Q平台接入问题整理
1.default.res.json 配置文件下载失败 RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigCom ...
- Egret之位图字体
1 , 关于位图字体的制作 2 , egret官方提供的资源 看看cartoon-font.fnt的内容 {"file":"cartoon-font.png", ...
最新文章
- LeetCode刷题记录9——58. Length of Last Word(easy)
- PouchContainer 容器技术演进助力阿里云原生升级
- 基础才是重中之重~.net中的显式事务与隐式事务
- wpf 点击某控件范围之外的区域 该控件隐藏_iOS平台设计规范(八)控件Controls...
- boost::tti模块测试函数模板
- ubuntu20.04 sshd 配置root 登录
- linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
- Maven依赖管理和插件配置
- Shell命令-磁盘与文件系统之e2fsck、mkswap
- ubuntu自定义分辨率
- gensim提取一个句子的关键词_NLP(五):关键词提取补充(语料库和向量空间)...
- Code Review 是一场苦涩但有意思的修行 | 凌云时刻
- php绘制甘特图,如何用excel做甘特图?甘特图制作方法图解
- 【实战】Docker容器资源管理
- 小布语音下载安装_oppo语音助手小布小冰安装包app
- 东莞市中考计算机考试试题,东莞中考信息技术特长生考试程序内容及评分标准...
- CF 1606E Arena
- 多设备制造工厂的IIOT解决方案--基于虹科IO-Link Wireless
- excel窗体最大化最小化_最小化Excel 2007功能区
- LeetCode刷题记
热门文章
- 论文阅读 - RoSGAS: Adaptive Social Bot Detection with ReinforcedSelf-Supervised GNN Architecture Search
- linux中fork函数详解,fork() 函数详解
- Redis中的fork
- 安装bugfree(MySQL未安装问题)
- 机器学习中的统计学基础
- 用50万撬动13亿,投资长津湖大卖50亿,吴京布局到底有多野?
- 01-HTML基础与进阶-day3-录像234
- Java实现伪QQ项目
- 追加审批人样式html,审批流程(报销)驳回(审批人驳回).html
- 艾永亮:为什么你的经销商那么不给力?