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 相关文章推荐
非常不错的功能强大代码简单的管理菜单美化版
Jul 09 Javascript
GWT中复制到剪贴板 js+flash实现复制 兼容性比较好
Mar 07 Javascript
jquery实现弹出层完美居中效果
Mar 03 Javascript
2014 年最热门的21款JavaScript框架推荐
Dec 25 Javascript
jQuery+Ajax+PHP+Mysql实现分页显示数据实例讲解
Sep 27 Javascript
javascript 动态脚本添加的简单方法
Oct 11 Javascript
Node中使用ES6语法的基础教程
Jan 05 Javascript
Vue.js 时间转换代码及时间戳转时间字符串
Oct 16 Javascript
Vue可自定义tab组件用法实例
Oct 24 Javascript
javascript 使用sleep函数的常见方法详解
Apr 26 Javascript
原生js+css实现tab切换功能
Sep 17 Javascript
在Vue里如何把网页的数据导出到Excel的方法
Sep 30 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
世界收音机发展史
2021/03/01 无线电
php下使用无限生命期Session的方法
2007/03/16 PHP
PHP实现下载功能的代码
2012/09/29 PHP
php之Memcache学习笔记
2013/06/17 PHP
使用swoole 定时器变更超时未支付订单状态的解决方案
2019/07/24 PHP
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
javascript自适应宽度的瀑布流实现思路
2013/02/20 Javascript
node.js集成百度UE编辑器
2015/02/05 Javascript
JS处理json日期格式化问题
2015/10/01 Javascript
jQuery插件EasyUI实现Layout框架页面中弹出窗体到最顶层效果(穿越iframe)
2016/08/05 Javascript
详解Node.Js如何处理post数据
2016/09/19 Javascript
angular.fromJson与toJson方法用法示例
2017/05/17 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
vue中element组件样式修改无效的解决方法
2018/02/03 Javascript
微信小程序实现红包功能(后端PHP实现逻辑)
2018/07/11 Javascript
vue+element的表格实现批量删除功能示例代码
2018/08/17 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
在vue中给后台接口传的值为数组的格式代码
2020/11/12 Javascript
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
django的登录注册系统的示例代码
2018/05/14 Python
python web自制框架之接受url传递过来的参数实例
2018/12/17 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
使用python turtle画高达
2020/01/19 Python
基于tensorflow __init__、build 和call的使用小结
2021/02/26 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
美国户外生活方式品牌:Eddie Bauer
2016/12/28 全球购物
三好学生自我鉴定
2013/12/17 职场文书
家长对孩子的评语
2014/04/18 职场文书
欢迎领导检查标语
2014/06/27 职场文书
学校党风廉政建设调研报告
2015/01/01 职场文书
导游词之介休绵山
2019/12/31 职场文书
python实现简单聊天功能
2021/07/07 Python
MySQL千万级数据表的优化实战记录
2021/08/04 MySQL
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python