jquery.emoji.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. /*
  2. * @auther rstyro
  3. * @blog http://www.lrshuai.top/blog
  4. * @Date 2017-12-15
  5. */
  6. (function($) {
  7. $.fn.emoji = function(options) {
  8. var defaults = {
  9. content_el:"#content",
  10. list: [{name:"QQ表情",code:"qq_",path:"./face/emoji1/",suffix:".gif",max_number:25},{name:"emoji表情",code:"em_",path:"./face/emoji2/",suffix:".png",max_number:22}]
  11. };
  12. var options = $.extend(defaults, options);
  13. var list = options.list;
  14. var content_el = options.content_el;
  15. $(this).click(function(e){
  16. if($(".emoji-box").length <=0){
  17. var btnlist = createBtnList(list);
  18. var emojilist = "";
  19. for(var i = 0;i<list.length;i++){
  20. emojilist = emojilist+createEmojiList(list[i]);
  21. }
  22. var total = "<div class='emoji-box'>"+btnlist+emojilist+"</div><em class='tip'></em><em class='tip2'></em>";
  23. $(this).parent().append(total);
  24. $(this).parent().find(".emoji-btn-box span").click(function(){
  25. var forid = $(this).attr("for");
  26. $("ul.emoji-ul").hide();
  27. $("#"+forid).show();
  28. $(".emoji-box>.emoji-btn-box>span").css("color","#ccc");
  29. $(this).css("color","blue");
  30. return false;
  31. });
  32. $(this).parent().find(".emoji-li").click(function(){
  33. var content = $(this).attr("alt");
  34. var contentvalue = $(content_el).val();
  35. $("#content").val(contentvalue+content);
  36. return false;
  37. });
  38. $("ul.emoji-ul").hide();
  39. $(".emoji-box>.emoji-btn-box>span").first().css("color","blue")
  40. $("#"+list[0].code+"emoji").show();
  41. var offset = $(this).position();
  42. $(".emoji-box").css("top",offset.top+$(this).height());
  43. $(".emoji-box").css("left",offset.left);
  44. $(this).parent().find("em.tip").css("top",offset.top+$(this).height()-20)
  45. $(this).parent().find("em.tip").css("left",offset.left+10)
  46. $(this).parent().find("em.tip2").css("top",offset.top+$(this).height()-19)
  47. $(this).parent().find("em.tip2").css("left",offset.left+10)
  48. }else{
  49. $(".emoji-box").hide();
  50. $("em.tip").hide();
  51. $("em.tip2").hide();
  52. $(".emoji-box").remove();
  53. $("em.tip").remove();
  54. $("em.tip2").remove();
  55. return false;
  56. }
  57. e.stopPropagation();
  58. });
  59. $(document).click(function(){
  60. $(".emoji-box").hide();
  61. $("em.tip").hide();
  62. $("em.tip2").hide();
  63. $(".emoji-box").remove();
  64. $("em.tip").remove();
  65. $("em.tip2").remove();
  66. });
  67. }
  68. //创建按钮节点列表
  69. function createBtnList(arr){
  70. var el = "";
  71. for(var i = 0;i<arr.length;i++){
  72. el =el+"<span for='"+arr[i].code+"emoji' class='emoji-btn'>"+arr[i].name+"</span>";
  73. }
  74. return "<div class='emoji-btn-box'>"+el+"</div>";
  75. }
  76. //创建emoji列表
  77. function createEmojiList(obj){
  78. var el="";
  79. for(var i = 1;i<=obj.max_number;i++){
  80. el =el + "<li class='emoji-li' alt='["+obj.code+i+"]'><img src='"+obj.path+i+obj.suffix+"' style='max-width:24px;'/></li>";
  81. }
  82. return "<ul class='emoji-ul' id='"+obj.code+"emoji'>"+el+"</ul>";
  83. }
  84. })(jQuery);