#需求 在egret中嵌入网页,类似

网上大概有两种思路吧,一种是直接在body里面加入iframe,如:【Egret】里使用iframe标签达到内嵌多个web界面;另一种就是通过模仿htmlinput来做,如egret的WebView实现。具体要什么样子看需求吧。

Egret由两个层组成,简单看一个页面:

html5party_egret1.png

id为“canvasDiv的DIV”层是一个canvas,主要用于文字、位图、矢量图等的渲染,id为“StageDelegateDiv”的层是使用HTML原生的输入文本组件,如下图:

html5party_egret2.png

输入文本这块有不少坑,比如焦点啥的

最终代码如下:

/**

* 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实现相关推荐

  1. H5游戏引擎为什么选择egret和怎么学习egret

    市面上有很多H5游戏引擎,国外的H5游戏引擎数不胜数,而国内较成熟的H5游戏引擎就是cocos2d-js.layabox还有今天的主题egret.为什么我要用egret白鹭引擎?因为相比于国内的另外两 ...

  2. egret php跨域,Egret问题总结

    1.使用EUI的项目发布到微信小游戏自定义皮肤组件找不到 在所有EUI皮肤类底部追加: window["类名"] = 类名; 比如Alert皮肤类   window["A ...

  3. 白鹭引擎生成html,初识Egret白鹭引擎 之 创建舞台

    简述 随着Html5游戏的逐渐普及,了解一款开发引擎,对于开发者是很有帮助的.目前国内比较流行的html5游戏引擎有:cocosCreator.Egret.Laya.今天就给大家详细介绍下当前比较流行 ...

  4. 白鹭php源码,egret 2D引擎源码分析(二) 创建播放器

    本帖最后由 fightingcat 于 2016-7-16 00:26 编辑 上一篇讲到了引擎的入口runEgret为每一个播放器标签(就是index.html中看到的那个 之前web.WebPlay ...

  5. Egret QQ玩一玩适配【踩坑日记】

    需要申明一点,这是我接过最坑的渠道了,各种神奇的问题,首先是接口比较奇怪而且新旧版本搞得很混乱,其次是平台底层实现性能差而且很多限制.此外,这里需要理清楚一个概念:QQ 玩一玩 和 QQ 玩吧 并非同 ...

  6. h5小游戏嵌入到微信小游戏中(以egret为例)

    H5小游戏源代码不能直接转换为微信小游戏发布,但是可以把现有的h5小游戏嵌入到微信小游戏中,这里使用egret举例.使用egret创建一个空的微信小游戏,在main.ts中资源加载完成后执行Webvi ...

  7. Egret之MC逐帧动画

    此处Egret逐帧动画借助Flash以及Texture Merger工具来生成文件( 1:动画描述文件Json , 动画图集文件 ) 本人以一只飞行的鸟为例 先看Flash , 如下 flash的项目 ...

  8. Egret游戏手Q平台接入问题整理

    1.default.res.json 配置文件下载失败 RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE, this.onConfigCom ...

  9. Egret之位图字体

    1 , 关于位图字体的制作 2 , egret官方提供的资源 看看cartoon-font.fnt的内容 {"file":"cartoon-font.png", ...

最新文章

  1. LeetCode刷题记录9——58. Length of Last Word(easy)
  2. PouchContainer 容器技术演进助力阿里云原生升级
  3. 基础才是重中之重~.net中的显式事务与隐式事务
  4. wpf 点击某控件范围之外的区域 该控件隐藏_iOS平台设计规范(八)控件Controls...
  5. boost::tti模块测试函数模板
  6. ubuntu20.04 sshd 配置root 登录
  7. linux搜索文件内容含有星号,文本内容查找grep、文件查找find、正则匹配
  8. Maven依赖管理和插件配置
  9. Shell命令-磁盘与文件系统之e2fsck、mkswap
  10. ubuntu自定义分辨率
  11. gensim提取一个句子的关键词_NLP(五):关键词提取补充(语料库和向量空间)...
  12. Code Review 是一场苦涩但有意思的修行 | 凌云时刻
  13. php绘制甘特图,如何用excel做甘特图?甘特图制作方法图解
  14. 【实战】Docker容器资源管理
  15. 小布语音下载安装_oppo语音助手小布小冰安装包app
  16. 东莞市中考计算机考试试题,东莞中考信息技术特长生考试程序内容及评分标准...
  17. CF 1606E Arena
  18. 多设备制造工厂的IIOT解决方案--基于虹科IO-Link Wireless
  19. excel窗体最大化最小化_最小化Excel 2007功能区
  20. LeetCode刷题记

热门文章

  1. 论文阅读 - RoSGAS: Adaptive Social Bot Detection with ReinforcedSelf-Supervised GNN Architecture Search
  2. linux中fork函数详解,fork() 函数详解
  3. Redis中的fork
  4. 安装bugfree(MySQL未安装问题)
  5. 机器学习中的统计学基础
  6. 用50万撬动13亿,投资长津湖大卖50亿,吴京布局到底有多野?
  7. 01-HTML基础与进阶-day3-录像234
  8. Java实现伪QQ项目
  9. 追加审批人样式html,审批流程(报销)驳回(审批人驳回).html
  10. 艾永亮:为什么你的经销商那么不给力?