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无缝滚动代码
Jan 03 Javascript
RGB颜色值转HTML十六进制(HEX)代码的JS函数
Apr 25 Javascript
有效的捕获JavaScript焦点的方法小结
Oct 08 Javascript
javascript中的作用域scope介绍
Dec 28 Javascript
JS获取屏幕,浏览器窗口大小,网页高度宽度(实现代码)
Dec 17 Javascript
JS的encodeURI和java的URLDecoder.decode使用介绍
May 08 Javascript
总结Javascript中数组各种去重的方法
Oct 04 Javascript
jQGrid动态填充select下拉框的选项值(动态填充)
Nov 28 Javascript
详解用原生JavaScript实现jQuery的某些简单功能
Dec 19 Javascript
JS遍历对象属性的方法示例
Jan 10 Javascript
vue+animation实现翻页动画
Jun 29 Javascript
JavaScript圣杯布局与双飞翼布局实现案例详解
Aug 05 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
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
2008/11/18 PHP
PHP tp5中使用原生sql查询代码实例
2020/10/28 PHP
Prototype使用指南之enumerable.js
2007/01/10 Javascript
纯CSS打造的导航菜单(附jquery版)
2010/08/07 Javascript
input 和 textarea 输入框最大文字限制的jquery插件
2011/10/27 Javascript
Json和Jsonp理论实例代码详解
2013/11/15 Javascript
js给onclick赋值传参数的两种方法
2013/11/25 Javascript
不使用jquery实现js打字效果示例分享
2014/01/19 Javascript
JavaScript也谈内存优化
2014/06/06 Javascript
让IE8浏览器支持function.bind()方法
2014/10/16 Javascript
概述jQuery的元素筛选
2016/11/23 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
tween.js缓动补间动画算法示例
2018/02/13 Javascript
vue-cli项目优化方法- 缩短首屏加载时间
2018/04/01 Javascript
mui js控制开关状态、修改switch开关的值方法
2019/09/03 Javascript
JS实现网站楼层导航效果代码实例
2020/06/16 Javascript
Python实现的单向循环链表功能示例
2017/11/10 Python
python-str,list,set间的转换实例
2018/06/27 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
Python多线程应用于自动化测试操作示例
2018/12/06 Python
PyTorch预训练的实现
2019/09/18 Python
python Tensor和Array对比分析
2020/01/08 Python
Python super()方法原理详解
2020/03/31 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
python中如何使用虚拟环境
2020/10/14 Python
python Tornado框架的使用示例
2020/10/19 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
菲律宾旅游网站:Expedia菲律宾
2017/10/11 全球购物
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
俄罗斯首家面向中国消费者的一站式购物网站:Wruru
2020/05/08 全球购物
请说出你所知道的线程同步的方法
2013/04/19 面试题
企业演讲比赛主持词
2014/03/18 职场文书
县级文明单位申报材料
2014/05/23 职场文书
小学美术兴趣小组活动总结
2014/07/07 职场文书
商务考察邀请函模板
2015/02/02 职场文书
今日说法观后感
2015/06/08 职场文书