多玩游戏大厅是fis3构建和打包(Webpack不支持IE8),通过avalon配合JQuery实现视图的逻辑(Vue和React都不支持)。页面跳转是通过多页面实现的(不是一个单页面应用)。
环境 | 域名
-|-
正式环境 |http://wan.duowan.com
测试环境 |http://test-wan.duowan.com
预发环境 |http://new-wan.duowan.com
|- src
|- api --- 通用的http请求api(封装http请求)
|- modules --- 按模块分类的api
|- assets --- 静态资源文件(图片)
|- components --- 不同模块对应的小组件
|- lib --- 项目引入的第三方库
|- mixins --- 全局混合(按需引入)
|- modules --- 封装的插件(lazhload,md5,qrcode...)
|- page --- 页面代码
|- bt --- bt页游
|- fcm --- 防沉迷
|- hezi --- 目前dnf旧版&新版盒子,lol盒子,坦克世界盒子左侧游戏tab入口(2个尺寸)
|- lolbox --- lol盒子和旧版dnf
|- box --- 坦克世界盒子和新版dnf
|- index --- 首页
|- popup --- 多玩游戏大厅盒子-内嵌webview弹窗页面
|- propCenter --- 道具中心-主要入口为运营推广广告
|- self --- 多玩游戏大厅盒子-左侧个人中心
|- agreement.html --- 多玩游戏充值协议
|- asset.html --- 各页面通用配置-若js没有<!--ignore-->标志会自动编译到下面的
|- index.html --- 首页
|- list.html --- 游戏列表-精品游戏
|- sdk --- 全局对象DW_APP_SDK 用于调用SDK的API
|- style --- 样式表(components,modules,page)
|- tpl --- 模板
|- typeing --- 类型检查
|- eslintrc.js --- eslint配置文件
|- fis-conf.js --- fis配置文件
## 混入方法
```mixins/index```文件是全局混入的方法,在avalon定义VM的时候要通过underscore的extend方法扩展。
```JS
import _ from "underscore"
var vm = avalon.define(_.extend({
}),`mixins(这里加mixins的内容)`)
提供公共方法
checkLogin --- 检测页面登录态
onEnterGame ---进入游戏(要登录态)
onEnterGameWithoutLogin ---进入游戏(不检测登录)
onChoiceServer ---选服
1.多玩通用统计-目前用于自定义页游广告点击
2.大厅统计pv/uv地方加上date-gid,data-poskey,data-dwgameclick标志,对应的方法
3.loginGame接口里面第三个参数(userSource)标志用户的来源,做到上报的
getLoginGame ({ gid, sid, userSource }) {
return ax.get('/loginGame.do', {
params: { gid, sid, userSource }
})
}
4.游戏页
5....
1.充值页,大厅盒子充值弹框,游戏页充值弹框都为同一个组件
2.默认帮用户选择游戏和区服(通过链接的&game_code=DZ&server_code=s4主动选择)
3.初始化方法暴露了一个initPayPopup方法,主要用于引入的页面主动调起初始化,避免多余请求
4.微信支付是后端返回一个支付链接前端生成二维码,支付宝支付则是后端返回支付宝的页面,前端通过iframe引入再用css调整显示二维码位置
1.iframe引入游戏页面,游戏链接都是有时效性&登录态的,故从接口拿
2.里面含上报,任务上报和时长上报(看上面上报那点)
广告部分暂时有两个自定义的广告位置,一个是右上角的,有个是右边侧边栏,对应接口是一个静态的JSON文件。修改图片链接或者是其他都在JSON文件中直接修改
模板位置:
// 多玩游戏大厅/模板管理/广告数据
jsonp_dwDa({
//web顶部导航-图文广告300*76
headerRight:{
title:'xx',
clientLink:'http://www.duowan.com/', // 客户端打开的链接
webLink:'http://pgame.duowan.com/dwgame.html', // web downLoad的链接
img:'http://img.dwstatic.com/yxdt/adPic/1907topright.png',
report:'dwgame_nav_youshangjiao' //上报id
},
//主页-右侧广告-宽250
mainRight:{
title:'xx',
clientLink:'dwgame://yygame', // 客户端打开的链接
webLink:'http://wan.yy.com/', // web 打开的链接
img:'http://img.dwstatic.com/yxdt/adPic/1906right.jpg',
report:'dwgame_main_youce' //上报id
},
});
// hosts文件在C:\Windows\System32\drivers\etc
127.0.0.1 yournickname.duowan.com
?__inline
可以实现对整个外部文件的引入,eg:html
background(url?__sprite)
实现对图片进行整合成雪碧图
1.游戏是通过iframe承载的,元素分为窗口元素和无窗口元素,在ie下窗口元素在最高层级的,设置z-index都是无效的,假如需要在游戏上面添加覆盖元素,要将覆盖的元素最下方添加一个空的iframe
参考 web端游戏页游戏助手
2.上报的时候,在点击关闭的时候触发onbeforeunload的方法。这个方法在JQuery引入的情况下,Chrome,Firefox浏览器都不能直接使用要套在JQuery方法里面才能使用
$(window).load(function () {
window.onunload = function () {
_this.gameReport()
return "Are you sure"
}
})
3.window.open 打开异步获取的链接或被浏览器adblock拦截