# 弹出层
TIP
特别注意:milo-next版本不兼容老版本的Dialog方法, TGDialogs需自行实现或进行修改相关的工具函数。 milo-next版本弹出层前端文档:https://ide.qq.com/milo/sdk/guide/tgdialog.html
<button onclick='TGDialogS("pop6");'>测试弹框</button>
<div class="dialog pop6" id="pop6" style="display:none">
<div class="dia-con">
</div>
<a class="dia-close" href="javascript:closeDialog();" title="关闭">关闭</a>
</div>
function TGDialogS(e) {
Milo.dialog.show({
id: e,
bgcolor: '#000', //背景色
opacity: 70 // 透明度
});
}
function closeDialog() {
// Use the milo library to import the dialog component
Milo.dialog.hide();
}
# eas数据统计
部分专题会有号码包统计上报的需求。
如不确定是否需要添加,请找内部产品同学确认是否有对按钮事件号码包的采集需要。
页面底部引入脚本:
<script src="//ossweb-img.qq.com/images/js/eas/eas.js "></script>
注意
引入前请检查是否已经加载过eas.js,例如milo.js中会加载eas.js
在需要上报的地方进行自定义埋点:
EAS.SendClick({ e_c: 'lol.a20210507yyb.videoplay', c_t: 4 });
参数说明:
名称 | 说明 | 备注 |
---|---|---|
e_c | 点击按钮事件的标识,填加活动标识前缀,避免跟其他活动冲突 标识前缀 + 自定义事件名称 命名举例: 活动地址为 lol.qq.com/a20200901xxx/,则标识前缀为 lol.a20200901xxx 活动地址为 lpl.qq.com/a20201207xxx/,则标识前缀为 lpl.a20201207xxx | *必填 |
c_t | 类型,默认为4即可 | *必填 |
与PTT点击上报同时使用:
PTTSendClick('btn','order','预约');
EAS.SendClick({ e_c: 'lol.a20210507yyb.btnorder', c_t: 4 });
# 双端适配
- 通过媒体查询的方式引入不同的样式文件,同时针对ie9以下进行条件注释:
<link rel="stylesheet" href="index.css" media="screen and (min-device-width: 1025px)">
<link rel="stylesheet" href="index-m.css" media="screen and (max-device-width: 1024px)">
<!--[if lt IE 9]><link rel="stylesheet" href="index.css"> <![endif]-->
- 移动端建议使用vw + rem方式进行适配布局,但不是说限制只能用这种布局方式。vw的兼容情况
将以下代码写入移动端样式文件中(以宽度为750px的设计稿为例):
html {
font-size: 50px;/* 兼容不支持vw的系统 */
font-size: 13.33333333vw;/* 7.5rem === 100vw */
}
@media (max-width: 1024px) {
html,body {
max-width: 1024px;
}
}
- 另外,提供一种适配方法,通过传入参数选择是rem适配或是通过动态生成target-densitydpi值进行适配,需放入页面头部head标签内:
<script>
//mode 移动端的适配方式 按需 传参 目前只有两种 px和rem
(function(win, doc, mode) {
var std = 750;
if(/(iPhone|iPad|iPod|iOS|Android|Windows Phone|BlackBerry|SymbianOS)/i.test(navigator.userAgent)) {
var h = document.getElementsByTagName("head")[0];
h.insertAdjacentHTML('beforeEnd', '<meta name="apple-mobile-web-app-capable" content="yes">');
h.insertAdjacentHTML('beforeEnd', '<meta name="apple-mobile-web-app-status-bar-style" content="black">');
h.insertAdjacentHTML('beforeEnd', '<meta name="format-detection" content="telephone=no">');
h.insertAdjacentHTML('beforeEnd', '<meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=no,minimal-ui" />');
if(mode == 'px') {
if (!win.addEventListener) return;
var html=document.documentElement;
function setFont()
{
function adaptVP(a){function c(){var c,d;return b.uWidth=a.uWidth?a.uWidth:750,b.dWidth=a.dWidth?a.dWidth:window.screen.width||window.screen.availWidth,b.ratio=window.devicePixelRatio?window.devicePixelRatio:1,b.userAgent=navigator.userAgent,b.bConsole=a.bConsole?a.bConsole:!1,a.mode?(b.mode=a.mode,void 0):(c=b.userAgent.match(/Android/i),c&&(b.mode="android-2.2",d=b.userAgent.match(/Android\s(\d+.\d+)/i),d&&(d=parseFloat(d[1])),2.2==d||2.3==d?b.mode="android-2.2":4.4>d?b.mode="android-dpi":d>=4.4&&(b.mode=b.dWidth>b.uWidth?"android-dpi":"android-scale")),void 0)}function d(){var e,f,g,h,c="",d=!1;switch(b.mode){case"apple":f=(window.screen.availWidth*b.ratio/b.uWidth)/b.ratio;c="width="+b.uWidth+",initial-scale="+f+",minimum-scale="+f+",maximum-scale="+f+",user-scalable=no";break;case"android-2.2":a.dWidth||(b.dWidth=2==b.ratio?720:1.5==b.ratio?480:1==b.ratio?375:.75==b.ratio?240:480),e=window.screen.width||window.screen.availWidth,375==e?b.dWidth=b.ratio*e:750>e&&(b.dWidth=e),b.mode="android-dpi",d=!0;case"android-dpi":f=160*b.uWidth/b.dWidth*b.ratio,c="target-densitydpi="+f+", width="+b.uWidth+", user-scalable=no",d&&(b.mode="android-2.2");break;case"android-scale":c="width="+b.uWidth+", user-scalable=no"}g=document.querySelector("meta[name='viewport']")||document.createElement("meta"),g.name="viewport",g.content=c,h=document.getElementsByTagName("head"),h.length>0&&h[0].appendChild(g)}function e(){var a="";for(key in b)a+=key+": "+b[key]+"; ";alert(a)}if(a){var b={uWidth:0,dWidth:0,ratio:1,mode:"apple",userAgent:null,bConsole:!1};c(),d(),b.bConsole&&e()}};adaptVP({uWidth:750});
}
win.addEventListener('resize',setFont,false)
setFont();
}
else if(mode == 'rem') {
var docEl = doc.documentElement,
resizeEvt = 'orientationchange' in window ? 'orientationchange' : 'resize',
recalc = function() {
var clientWidth = docEl.clientWidth;
if(!clientWidth) return;
docEl.style.fontSize = 100 * (clientWidth / std) + 'px';
};
if(!doc.addEventListener) return;
recalc();
win.addEventListener(resizeEvt, recalc, false);
doc.addEventListener('DOMContentLoaded', recalc, false);
}
}
})(window, document, 'px');
</script>
使用案例:https://lol.qq.com/act/a20190510battle/index.html
# PC端公共Top条
页面底部引入脚本:
<script src="//ossweb-img.qq.com/images/lol/title/lol.js"></script>
# 专题通用底部
适用于专题页面底部公共信息展示
提示
所有专题默认必须引入,如有特殊情况与内部前端同学沟通
# 使用示例
https://lol.qq.com/cguide/code/demo/footStyle.html
使用方式建议以下两种:
1.直接引用foot.js
<script src="//game.gtimg.cn/images/js/2018foot/foot.js"></script>
//在body标签内把页脚appendchild到文档流最底部
2.加个容器 id="afooter",如果需要在特定位置插入底部内容,使用此方式
<div id="afooter"></div>
<script src="//game.gtimg.cn/images/js/2018foot/foot.js"></script>
//如果需要用其他标签包含页脚,请使用id="afooter"
# 默认样式
以下是一套默认样式,可直接拷贝到项目样式中使用
PC端:
#afooter {
padding:30px 0;
text-align:center;
font-size:12px;
line-height:20px;
background-color:#000;
color:#c0c0c0;
}
#afooter a,#afooter a:hover {
color:#c0c0c0;
text-decoration:none;
}
移动端:
#afooter {
text-align:center;
font-size:.2rem;/*根据适配方式调整*/
padding:.3rem 0;/*根据适配方式调整*/
line-height:1.5;
background-color: #000;
color:#c0c0c0;
}
# PC端宽度自适应
适用于需求人明确希望页面撑满浏览器宽度的专题页
// 屏幕自适应
if (!/(iPhone|iPad|iPod|iOS|Android|Windows Phone|BlackBerry|SymbianOS)/i.test(navigator.userAgent)) {
// 只需要在PC端工作
var adaptViewport = (function () {
function detectIE() {
var ua = window.navigator.userAgent;
var msie = ua.match(/MSIE (\d+)/g);
if (msie != null) {
return parseInt(msie[0].match(/\d+/g)[0]);
}
// IE 11
var trident = ua.indexOf('Trident/');
if (trident > 0) {
var rv = ua.indexOf('rv:');
return parseInt(ua.substring(rv + 3, ua.indexOf('.', rv)), 10);
}
return false;
}
var minWidth = 1400; // 最小宽度
var maxWidth = 3400; // 最大宽度
var designWidth = 1920; // 设计稿宽度
var isFirefox = navigator.userAgent.indexOf("Firefox") != -1
var ieVersion = detectIE();
var zoom = 1;
function resize(){
// doc.clientWidth不包含滚动栏宽度
var ww = document.documentElement.clientWidth || window.innerWidth;
var realWid = Math.min(Math.max(ww, minWidth), maxWidth);
zoom = realWid/designWidth;
if (ieVersion && ieVersion < 9) { return; }
// firefox不支持zoom. ie9,10,11 zoom表现奇怪
if (isFirefox || ieVersion >= 9) {
if (zoom !== 1) {
if (!$('.wrapper').parent().hasClass('wrapper-scale')) {
$('.wrapper').wrapper('<div class="wrapper-scale"></div>')
$('.wrapper').data('originHeight', $('.wrapper').outerHeight())
}
var transformOrigin = '0% 0%';
// 页面最外层容器缩放
$('.wrapper').css({'width': designWidth,'transform':'scale('+zoom+')', 'transform-origin': transformOrigin, 'margin-left': 0})
// 导航缩放
if (zoom >= 1) {
$('.side_nav').css({ 'transform': 'scale(' + 1 / zoom + ')', 'transform-origin': '100% 50%' });
} else {
$('.side_nav').css({ 'transform': 'scale(' + zoom + ')', 'transform-origin': '100% 50%' });
}
}
} else {
// 页面最外层容器缩放
$('.wrapper').css({'width': designWidth, 'zoom': zoom});
// 导航缩放
if (zoom >= 1) {
$('.side_nav').css('zoom', 1 / zoom)
} else {
$('.side_nav').css('zoom', zoom)
}
}
}
resize();
window.onresize = resize;
return { zoom: zoom}
})();
}
# 配置说明
参数 | 说明 |
---|---|
$('.wrapper') | 页面主模块容器,一般为<body> 的第一个子元素 |
$('.side_nav') | 页面侧边导航容器,一般被包裹在$('.wrapper')中。因此页面放大时,侧边栏不要放大;页面缩小时,侧边栏增倍缩小 |
designWidth | 设计稿中的页面标准宽度,一般为 1920 |
minWidth | 缩放逻辑生效的最小宽度,默认为 1400 |
maxWidth | 缩放逻辑生效的最大宽度,默认为 3400 |