discuz表情的JS提取方法分析


Posted in Javascript onMarch 22, 2017

本文实例讲述了discuz表情的JS提取方法。分享给大家供大家参考,具体如下:

discuz将应用的表情生成了一个js文件,在forumdata/cache/下,叫smilies_var.js,这个文件是根据后台数据库 生成的一个表情数组,里面有两个数组,一个是表情名称和所在目录的数组smilies_type,一个是表情图片名和代码的数组 smilies_array,这些都是更新缓存的时候自己读数据库生成的,所以后台的改动一样会改动到它。

论坛快速回复的表情是一个弹出层,虽然已经很不错,但仍然会增加用户的操作复杂度,因此需要将它移出来,放在边上,就向下图:

discuz表情的JS提取方法分析

既然论坛已经将表情的数据以数组的形式放在了JS文件里,那要实现这个功能,其实就是一个操作数组的问题了,再上一些简单的翻页,换表情,点击表情 输出到文本框里就行了。那现在就在拆分一下,从图上就可以看出,表情部分一共分成了3块,1、表情种类(表情名称),2、表情列表,3、分页。

看看smilies_var.js里对表情种类的数组

var smilies_type = new Array();
smilies_type[6] = ['悠嘻猴', 'yxh'];
smilies_type[5] = ['免斯基', 'tsj'];
smilies_type[4] = ['蘑菇点', 'mgd'];
smilies_type[3] = ['呆呆男', 'grapeman'];

它其实就是一个2维数组,要像图上那样做,可以这样做:

<script type="text/javascript">
i=0;
for(var a in smilies_type){
  i++;
  for(var b in smilies_type[a]){
    if(b==0){
      if(i==1){
        document.write("<li class='fthis' onclick='ftab(this);loadsmilies("+a+",1,\"f\");'><a href='javascript:;'>"+smilies_type[a][0]+"</a></li>");
      }else{
        document.write("<li onclick='ftab(this);loadsmilies("+a+",1,\"f\");'><a href='javascript:;'>"+smilies_type[a][0]+"</a></li>");
      }
    }
  }
}
</script>

其中的ftab()和loadsmilies()函数都先可以不管,i这个变量是用来确认第一个表情类型的,好给表现层加上当前示意。

表情图片的数组处理方式其实和类型是一样,只是可能不只2维了,具体的处理程序如下:

<script type="text/javascript">
function loadsmilies (m,n,f) {
var restr='';
var restr='<div style="width:300px;height:170px;">';
for(var a in smilies_array[n]){
for(var b in smilies_array­[n][a]){
if(b==2){
restr=restr+"<img src='images/smilies/"+smilies_type­[1]+"/"+smilies_array­[n][a][b]+"' alt='' onclick='document.getElementById(\"fastpostmessage\").value=document.getElementById(\"fastpostmessage\").value+\""+smilies_array[n][a][1]+"\";' style='cursor:pointer;width:30px;height:30px;' /> ";
}
}
}
restr=restr+"</div><div class='fsmilies_page'>";
var mnum=smilies_array­.length;
for(var i=0;i<mnum-1;i++){
var j=i+1;
restr=restr+"<a href=\"javascript:;\" onclick=\"loadsmilies("+m+","+j+",'f');\">["+j+"]</a> ";
}
restr=restr+"</div>";
document.getElementById(f).innerHTML=restr;
}
</script>

这里面还包含了分页的处理,就是通过对数组求其长度来找到页数,然后循环输出,再调用loadsmilies()函数,传参,达到目的,每次点击都 往指定的<div>里输出,一切就OK了。初始化代码:<script type='text/javascript'>loadsmilies(6,1,'f');</script>,里面的第三个参数f 即为用于放表情的<div>ID。

程序很简单,不多讲。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
High Performance JavaScript(高性能JavaScript)读书笔记分析
May 05 Javascript
JS面向对象编程详解
Mar 06 Javascript
浅析JS异步加载进度条
May 05 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
原生js实现可拖拽效果
Feb 28 Javascript
Less 安装及基本用法
May 05 Javascript
浅谈Redux中间件的实践
Jul 27 Javascript
vue移动端屏幕适配详解
Apr 30 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
Jul 10 Javascript
微信小程序tab切换可滑动切换导航栏跟随滚动实现代码
Sep 04 Javascript
解决vue-router路由拦截造成死循环问题
Aug 05 Javascript
一起深入理解js中的事件对象
Feb 06 Javascript
详解vue2.0组件通信各种情况总结与实例分析
Mar 22 #Javascript
JS简单封装的图片无缝滚动效果示例【测试可用】
Mar 22 #Javascript
Vue计算属性的学习笔记
Mar 22 #Javascript
Angular2实现自定义双向绑定属性
Mar 22 #Javascript
Bootstrap如何激活导航状态
Mar 22 #Javascript
Bootstrap超大屏幕的实现代码
Mar 22 #Javascript
Bootstrap缩略图的创建方法
Mar 22 #Javascript
You might like
php 无限分类的树类代码
2009/12/03 PHP
php字符串截取的简单方法
2013/07/04 PHP
CI框架中zip类应用示例
2014/06/17 PHP
PHP把数字转成人民币大写的函数分享
2014/06/30 PHP
php 升级到 5.3+ 后出现的一些错误,如 ereg(); ereg_replace(); 函数报错
2015/12/07 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
JavaScript对象之间的转换 jQuery对象和原声DOM
2011/03/07 Javascript
jQuery性能优化的38个建议
2014/03/04 Javascript
网页右侧悬浮滚动在线qq客服代码示例
2014/04/28 Javascript
使用Plupload实现直接上传附件至七牛云存储
2014/12/26 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
360doc网站不登录就无法复制内容的解决方法
2018/01/27 Javascript
微信小程序实现全局搜索代码高亮的示例
2018/03/30 Javascript
NodeJS使用Range请求实现下载功能的方法示例
2018/10/12 NodeJs
微信小程序时间轴实现方法示例
2019/01/14 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
python在线编译器的简单原理及简单实现代码
2018/02/02 Python
python爬取淘宝商品详情页数据
2018/02/23 Python
Python 3.7新功能之dataclass装饰器详解
2018/04/21 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python标准库shutil用法实例详解
2018/08/13 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
Python django框架应用中实现获取访问者ip地址示例
2019/05/17 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
python列表生成器迭代器实例解析
2019/12/19 Python
基于python监控程序是否关闭
2020/01/14 Python
碧欧泉美国官网:Biotherm美国
2016/08/31 全球购物
市场开发与营销专业求职信
2013/12/31 职场文书
学校师德承诺书
2014/05/23 职场文书
办公室岗位职责
2015/02/04 职场文书
导游词之河北野三坡
2019/12/11 职场文书
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android