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中输入验证中一个不错的效果
Aug 21 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 Javascript
JavaScript字符串对象substring方法入门实例(用于截取字符串)
Oct 17 Javascript
jquery实现增加删除行的方法
Feb 03 Javascript
jQuery的选择器中的通配符[id^='code']或[name^='code']及jquery选择器总结
Dec 24 Javascript
特殊日期提示功能的实现方法
Jun 16 Javascript
AngularJS中的缓存使用
Jan 11 Javascript
jQuery插件imgAreaSelect基础讲解
May 26 jQuery
基于datepicker定义自己的angular时间组件的示例
Mar 14 Javascript
vue中设置height:100%无效的问题及解决方法
Jul 27 Javascript
js防抖和节流的深入讲解
Dec 06 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
Apr 17 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
收音机怀古---春雷3P7图片欣赏
2021/03/02 无线电
10条PHP高级技巧[修正版]
2011/08/02 PHP
深入apache配置文件httpd.conf的部分参数说明
2013/06/28 PHP
简单谈谈php中的unicode和utf8编码
2015/06/10 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
CentOS下搭建PHP环境与WordPress博客程序的全流程总结
2016/05/07 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
使用ucenter实现多站点同步登录的讲解
2019/03/21 PHP
Laravel5.7框架安装与使用学习笔记图文详解
2019/04/02 PHP
Javascript中的this绑定介绍
2011/09/22 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
jquery实现点击label的同时触发文本框点击事件的方法
2015/06/05 Javascript
js的flv视频播放器插件使用方法
2015/06/23 Javascript
使用jquery/js获取iframe父子级、同级获取元素的方法
2016/08/05 Javascript
利用Javascript实现BMI计算器
2016/08/16 Javascript
深入理解JavaScript定时机制
2016/10/27 Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
2017/04/26 Javascript
Vue全家桶实践项目总结(推荐)
2017/11/04 Javascript
Es6 Generator函数详细解析
2018/02/24 Javascript
ES6关于Promise的用法详解
2018/05/07 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
浅谈vue 多个变量同时赋相同值互相影响
2020/08/05 Javascript
Python中的深拷贝和浅拷贝详解
2015/06/03 Python
python 读取excel文件生成sql文件实例详解
2017/05/12 Python
Python tkinter实现的图片移动碰撞动画效果【附源码下载】
2018/01/04 Python
Python3一行代码实现图片文字识别的示例
2018/01/15 Python
解决python selenium3启动不了firefox的问题
2018/10/13 Python
Selenium之模拟登录铁路12306的示例代码
2020/07/31 Python
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
物流管理专业求职信
2014/05/29 职场文书
民主评议党员登记表自我评价
2014/10/20 职场文书
2015年小学生暑假总结
2015/07/13 职场文书
如何写通讯稿
2015/07/22 职场文书
新学期主题班会
2015/08/17 职场文书
公文写作:新员工转正申请书范本3篇!
2019/08/07 职场文书