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 相关文章推荐
Discuz! 6.1_jQuery兼容问题
Sep 23 Javascript
jquery1.4.2 for Visual studio 2010 模板文件
Jul 14 Javascript
js面向对象设计用{}好还是function(){}好(构造函数)
Oct 23 Javascript
jquery 元素控制(追加元素/追加内容)介绍及应用
Apr 21 Javascript
jQuery实现contains方法不区分大小写的方法
Feb 13 Javascript
jQuery插件bxSlider实现响应式焦点图
Apr 12 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
Apr 17 Javascript
网页中JS函数自动执行常用三种方法
Mar 30 Javascript
JS限制输入框输入的实现代码
Jul 02 Javascript
vue中子组件传递数据给父组件的讲解
Jan 27 Javascript
微信小程序后端无法保持session的原因及解决办法问题
Mar 20 Javascript
Element-ui upload上传文件限制的解决方法
Jan 22 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使用http_build_query()构造URL字符串的方法
2016/04/02 PHP
CodeIgniter框架验证码类库文件与用法示例
2017/03/18 PHP
基于PHP实现发微博动态代码实例
2020/12/11 PHP
Opacity.js
2007/01/22 Javascript
不要在cookie中使用特殊字符的原因分析
2010/07/13 Javascript
jQuery插件开发基础简单介绍
2013/01/07 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
基于jQuery实现网页进度显示插件
2015/03/04 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
Vue响应式添加、修改数组和对象的值
2017/03/20 Javascript
Vue和Bootstrap的整合思路详解
2017/06/30 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
深入理解vue-class-component源码阅读
2019/02/18 Javascript
小程序中canvas的drawImage方法参数使用详解
2019/07/04 Javascript
Vue.js项目实战之多语种网站的功能实现(租车)
2019/08/07 Javascript
node.js使用net模块创建服务器和客户端示例【基于TCP协议】
2020/02/14 Javascript
Python实现的使用telnet登陆聊天室实例
2015/06/17 Python
python如何实现excel数据添加到mongodb
2015/07/30 Python
你眼中的Python大牛 应该都有这份书单
2017/10/31 Python
Python清空文件并替换内容的实例
2018/10/22 Python
python增加图像对比度的方法
2019/07/12 Python
python标准库os库的函数介绍
2020/02/12 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
python怎么对数字进行过滤
2020/07/05 Python
Django url 路由匹配过程详解
2021/01/22 Python
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
机电工程专业应届生求职信
2013/10/03 职场文书
会计毕业生求职简历的自我评价
2013/10/20 职场文书
药学专业大专生的自我评价
2013/12/12 职场文书
环保建议书400字
2014/05/14 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
党员干部学习心得体会
2016/01/23 职场文书
Windows下使用Nginx+Tomcat做负载均衡的完整步骤
2021/03/31 Servers
python中requests库+xpath+lxml简单使用
2021/04/29 Python
Python超简单容易上手的画图工具库推荐
2021/05/10 Python