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 相关文章推荐
jQuery替换字符串(实例代码)
Nov 13 Javascript
jquery 取子节点及当前节点属性值的方法
Aug 24 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
详解JavaScript对象序列化
Jan 19 Javascript
jquery中validate与form插件提交的方式小结
Mar 26 Javascript
详解BootStrap中Affix控件的使用及保持布局的美观的方法
Jul 08 Javascript
AngularJS 过滤器(自带和自建)详解
Sep 19 Javascript
html+javascript+bootstrap实现层级多选框全层全选和多选功能
Mar 09 Javascript
深入理解Node.js中通用基础设计模式
Sep 19 Javascript
使用Vue-Router 2实现路由功能实例详解
Nov 14 Javascript
vue 监听键盘回车事件详解 @keyup.enter || @keyup.enter.native
Aug 25 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
Mar 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的call_user_func传reference引发的思考
2010/07/23 PHP
PHP实现的Redis多库选择功能单例类
2017/07/27 PHP
网页源代码保护(禁止右键、复制、另存为、查看源文件)
2012/05/23 Javascript
jQuery判断iframe中元素是否存在的方法
2013/05/11 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
js读写cookie实现一个底部广告浮层效果的两种方法
2013/12/29 Javascript
原生js实现淘宝首页点击按钮缓慢回到顶部效果
2014/04/06 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
jQuery事件绑定和委托实例
2014/11/25 Javascript
详解javascript遍历方式
2015/11/11 Javascript
基于javascript实现九九乘法表
2016/03/27 Javascript
vue用addRoutes实现动态路由的示例
2017/09/15 Javascript
Angular实现较为复杂的表格过滤,删除功能示例
2017/12/23 Javascript
基于vue-cli 打包时抽离项目相关配置文件详解
2018/03/07 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
vue中上传视频或图片或图片和文字一起到后端的解决方法
2019/12/01 Javascript
Vue常用API、高级API的相关总结
2021/02/02 Vue.js
[56:00]2018DOTA2亚洲邀请赛 4.6 淘汰赛 VP vs TNC 第二场
2018/04/10 DOTA
Python 命令行非阻塞输入的小例子
2013/09/27 Python
使用python分析git log日志示例
2014/02/27 Python
Python注释详解
2016/06/01 Python
python Socket之客户端和服务端握手详解
2017/09/18 Python
TensorFlow实现MLP多层感知机模型
2018/03/09 Python
Python加载带有注释的Json文件实例
2018/05/23 Python
Python 模拟生成动态产生验证码图片的方法
2020/02/01 Python
html5 兼容IE6结构的实现代码
2012/05/14 HTML / CSS
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
巴西葡萄酒销售网站:Wine.com.br
2017/11/07 全球购物
eBay瑞士购物网站:eBay.ch
2018/12/24 全球购物
社保委托书怎么写
2014/08/02 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
婚前协议书范本两则
2014/10/16 职场文书
幼师大班个人总结
2015/02/13 职场文书
表扬信范文
2019/04/22 职场文书
解决hive中导入text文件遇到的坑
2021/04/07 Python