脚本实现——大屏板块数字,告别letter-spacing+背景图片的方式 转至元数据结尾

2324
1

大白 小试身手Lv3

发表于2019-10-12 18:37

楼主
本帖最后由 大白 于 2020-6-3 17:25 编辑

需求来源:
在制作大屏时,美工经常提供板块式数字效果,之前我们通过letter-spacing+背景图片+各种细节对齐调节的方式,来完成美工提供的效果图,但是这样实现 也是十分麻烦的,经常无法做到对齐,如果字体大小改变,还需要重新对齐重新找美工要背景图等等。

实现方式:
1、用表格获取数据库的数据
2、表格获取的数据,设置是否显示千分符
3、在客户端添加如下脚本:
// 定义变量获取表格中数字
var inNum1='<#=GRID1.A1.txt#>';
/**
divId:表格中的容器id,用户存放转化后的数字
inNum:传入的数字或字符
fSize:字体大小
fColor:字体颜色
outDivWidth:字体背景块宽度
outDivHeight:字体背景块高度
outDivbackgroundColor:字体背景块颜色
outDivMargin:块间距
middleFlag:字体是否相对居中(1:是 0:否),否的情况下,字体起始位置为容器divId的左边框位置
**/
function getSpecial(divId,inNum,fSize,fColor,outDivWidth,outDivHeight,outDivbackgroundColor,outDivMargin,middleFlag){
//定义数组,数字转化为数组
var changeArray=inNum.split('');
//数组长度
var numLen=changeArray.length;
//定义变量存储 拼接的 html
var htmlString='';
//用来存放字体样式相关css
var fontStyle='font-size:'+fSize+';color:'+fColor;
//定义字符串,用了存放字体背景块样式相关css
var divStyle='width:'+outDivWidth+';height:'+outDivHeight+';background-color:'+outDivbackgroundColor+';margin-right:'+outDivMargin;
//存放板块数字的容器的宽度
var divTotalWidth=parseInt(outDivWidth)*numLen+(numLen-1)*5;
//让每个背景块横向显示,让板块数字外层容器宽度和内容总宽度匹配
$('#'+divId).css('display','-webkit-box');
$('#'+divId).css('width',divTotalWidth+'px');
//根据判断middleFlag,来进行设置是否相对居中
if(middleFlag==1){
$('#'+divId).css('left',parseInt($('#'+divId).parent().css('width'))/2-divTotalWidth/2+'px');
}
//循环变量每个字符,拼接出需要 的html标签(每个字符的字体以及背景块)
for(i=0;i<numLen;i++){
htmlString+='<div style="'+divStyle+'"><span style="vertical-align:middel;text-align:center;'+fontStyle+'">'+changeArray+'</span></div>';
}
//将拼接后的字符串 设置 到定义容器中
$('#'+divId).html(htmlString);
}

//执行定义的函数
getSpecial('HHH8',inNum1,'20px','yellow','20px','30px','#339966','5px',0);
实现效果如下:

[size=13.3333px]发散思维:
[size=13.3333px]上面脚本中的fontStyle和divStyle等内容,可以设置背景图片等等,只需要修改对应 字符串模块就可以了~~~
[size=13.3333px]下面是样式背景和字体样式完全 在字符串中自定义的方式,  而且  浮点数的.  可以选择是否 设置背景的脚本
[size=13.3333px]/**
[size=13.3333px]divId:表格中的容器id,用户存放转化后的数字
inNum:传入的数字或字符
middleFlag:字体是否相对居中(1:是 0:否),否的情况下,字体起始位置为容器divId的左边框位置
pointFlag:点是否需要背景(1:是 0:否)
[size=13.3333px]**/
[size=13.3333px]function getSpecial(divId,inNum,middleFlag,pointFlag){
//定义数组,数字转化为数组
var changeArray=inNum.split('');
//数组长度
var numLen=changeArray.length;
//定义变量存储 拼接的 html
var htmlString='';
//用来存放字体样式相关css
var fontStyle='font-size:40px;color:#ffffff';
[size=13.3333px]//定义字符串,用了存放字体背景块样式相关css,背景块字体大于等于字体大小
var divStyle="text-align:center;vertical-align:midde;line-height:1.5;width:40px;height:60px;background:url('vfs/root/products/ebi/sys/picture/demo图标列表/cell_bg.png');background-size:100% 100%;margin-right:5px;margin-right:5px";
var divPointStyle="width:20px;height:30px;margin-right:5px";
[size=13.3333px]//存放板块数字的容器的宽度
var divTotalWidth=20*numLen+(numLen-1)*5;
[size=13.3333px]//让每个背景块横向显示,让板块数字外层容器宽度和内容总宽度匹配
$('#'+divId).css('display','-webkit-box');
$('#'+divId).css('width',divTotalWidth+'px');
[size=13.3333px]//根据判断middleFlag,来进行设置是否相对居中
if(middleFlag==1){
$('#'+divId).css('left',parseInt($('#'+divId).parent().css('width'))/2-divTotalWidth/2+'px');
}
[size=13.3333px]//循环变量每个字符,拼接出需要 的html标签(每个字符的字体以及背景块)
for(i=0;i<numLen;i++){
if(pointFlag==1){
if(changeArray.indexOf('.')>-1){
htmlString+='<div style="'+divPointStyle+'"><span style="vertical-align:middel;text-align:center;'+fontStyle+'">'+changeArray+'</span></div>';
}else{
htmlString+='<div style="'+divStyle+'"><span style="vertical-align:middel;text-align:center;'+fontStyle+'">'+changeArray+'</span></div>';
}
}else{
htmlString+='<div style="'+divStyle+'"><span style="vertical-align:middel;text-align:center;'+fontStyle+'">'+changeArray+'</span></div>';
}
}
[size=13.3333px]//将拼接后的字符串 设置 到定义容器中
$('#'+divId).html(htmlString);
}
[size=13.3333px]
//执行定义的函数
getSpecial('HHH4','<#=GRID1.A1.txt#>',1,0);

最近看过此主题的会员

esen_540NOI0GUW

esen_4Y3L5ADO80

esen_54Q7AO7N6W

alimu

esen_3H03HK78MGNH

wxw

关壮壮

1个回答

只看楼主

小亿 管理员

发表于2019-10-17 15:54

只看该作者

取消 关注该作者的回复

沙发

文档前面为什么都有size?mafan楼主修改一下哈~

登录后可回答问题,请登录注册

快速回复 返回顶部 返回列表

小时

全天响应

分钟

快速处理问题

工程师强势助力

明星产品
解决方案
联系合作

400咨询:400-0011-866

技术支持QQ:400-0011-866(工作日9:00-18:00)

产品建议邮箱yixin@esensoft.com

关注我们

扫TA学习更多干货

一对一专家交流

版权所有© 2006-2024 北京亿信华辰软件有限责任公司 京ICP备07017321号 京公网安备11010802016281号