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 相关文章推荐
js复制到剪切板的实例方法
Jun 28 Javascript
jQuery 追加元素的方法如append、prepend、before
Jan 16 Javascript
html5+javascript实现简单上传的注意细节
Apr 18 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
Apr 24 jQuery
简单实现jQuery弹幕效果
May 06 jQuery
Ionic2开发环境搭建教程
Aug 20 Javascript
解决vue 中 echart 在子组件中只显示一次的问题
Aug 07 Javascript
layui点击导航栏刷新tab页的示例代码
Aug 14 Javascript
Vue-Quill-Editor富文本编辑器的使用教程
Sep 21 Javascript
layui实现数据表格table分页功能(ajax异步)
Jul 27 Javascript
JavaScript实现动态生成表格
Aug 02 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 文件上传代码(限制jpg文件)
2010/01/05 PHP
php array_unique之后json_encode需要注意
2011/01/02 PHP
PHP5 的对象赋值机制介绍
2011/08/02 PHP
thinkphp3.2实现跨控制器调用其他模块的方法
2017/03/14 PHP
php实现获取近几日、月时间示例
2019/07/06 PHP
HTML中Select不用Disabled实现ReadOnly的效果
2008/04/07 Javascript
JS动态显示表格上下frame的方法
2015/03/31 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
jQuery的内容过滤选择器学习教程
2016/04/18 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
基于Bootstrap使用jQuery实现输入框组input-group的添加与删除
2016/05/03 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
Angularjs中的ui-bootstrap的使用教程
2017/02/19 Javascript
javascript DOM的详解及实例代码
2017/03/06 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
微信小程序用户位置权限的获取方法(拒绝后提醒)
2018/11/15 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python中出现IndentationError:unindent does not match any outer indentation level错误的解决方法
2020/04/18 Python
关于Python3 lambda函数的深入浅出
2019/11/27 Python
python实现PCA降维的示例详解
2020/02/24 Python
关于HTML5 Placeholder新标签低版本浏览器下不兼容的问题分析及解决办法
2016/01/27 HTML / CSS
新西兰领先的内衣店:Bendon Lingerie新西兰
2018/07/11 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
关键字throw与throws的用法差异
2016/11/22 面试题
个人查摆问题整改措施
2014/10/04 职场文书
庆六一宣传标语
2014/10/08 职场文书
湖南省党的群众路线教育实践活动总结会议新闻稿
2014/10/21 职场文书
信访稳定工作汇报
2014/10/27 职场文书
2014年初级职称工作总结
2014/12/08 职场文书
音乐之声观后感
2015/06/04 职场文书
大学毕业典礼致辞
2015/07/29 职场文书
五年级数学教学反思
2016/02/16 职场文书
导游词之北京明十三陵
2019/10/28 职场文书
PyMongo 查询数据的实现
2021/06/28 Python
Vue组件化(ref,props, mixin,.插件)详解
2022/05/15 Vue.js