zoukankan      html  css  js  c++  java
  • jquery 表情编辑器

    写了个jquery的表情编辑器,如下:

    image

    点击弹出表情:

    image

    选择表情:

    image

    提交按钮获取相应的html:

    image

    jquery的代码很简单:

    /**
    * jQuery's jqfaceedit Plugin
    *
    *  jquery face html edit
    *  
    *
    * @author yuan lin
    * @version 0.1
    * @copyright Copyright(c) 2010.  
    * @date 2010-10-11		 
    */
    
    (function($) {
        $.fn.jqfaceedit = function(options) {
    
            var defaults = {
                txtAreaObj: options //TextArea对象
            }
            var options = $.extend(defaults, options);
    
            this.each(function(){
                var Obj = $(this);
                $(Obj).bind("click", function(e) {
                    var faceHtml = '<div id="message_face_menu" class="facebox" style="position: absolute; display:none"><ul>';
                    for (i = 1; i < 31; i++) {
                        faceHtml += '<li Other=' + i + '><img src="emoticons/' + i + '.gif"  style="cursor:pointer; position:relative;"   /></li>';
                    }
                    faceHtml += '</ul></div>';
                    var height = $("body").height();
    
                    var width = $("body").width();
                    faceHtml += '<div id="uchome_face_bg" style="position: absolute; top: 0px; left: 0px; ' + width + 'px; height: ' + height + 'px; background-color: rgb(255, 255, 255); z-index: 10000; opacity: 0;filter:progid:DXImageTransform.Microsoft.Alpha(opacity=0,finishOpacity=100,style=0)"></div>';
                    $("body").append(faceHtml);
                    $("#uchome_face_bg").bind("click", function(e) {
                        $('#uchome_face_bg').remove();
                        $("#message_face_menu").css("display", "none");
    
                    });
                    $("#message_face_menu ul >li").bind("click", function() {
                        var id = $(this).attr("Other");
                        var faceText = '[em:' + id + ']';
    
                        $("#" + options.txtAreaObj).val($("#" + options.txtAreaObj).val() + faceText);
                        $("#message_face_menu").remove();
                        $("#uchome_face_bg").remove();
    
                        var setFocusText = $("#" + options.txtAreaObj);
                        var setFocusTextLeg = setFocusText.val().length;
                        setFocusText.focus(); // 默认使用focus方法聚焦
                        // 判断是否为Ie浏览器
                        if ($.browser.msie) {
                            var txt = setFocusText[0].createTextRange(); // 将传入的控件对象转换为Dom对象,并创建一个TextRange对象
                            txt.moveStart('character', setFocusTextLeg);   // 设置光标显示的位置
                            txt.collapse(true);
                            txt.select();
                        }
                    });
                    var offset = $(e.target).offset();
                    offset.top += $(this).height();
                    $("#message_face_menu").css(offset).show();
                });
    
    
                $("#" + options.buttonObj).bind("click", function(e) {
                    var rContent = $("#" + options.txtAreaObj).val();
                    rContent = rContent.replace(/\[em:/g, '<img src="emoticons/');
                    rContent = rContent.replace(/\]/g, ".gif />");
                    return rContent;
                });
            });
       };
        //私有函数 用于html替换 
        function RepHtml(str) {
            str = str.replace(/\[em:/g, '<img src="emoticons/');
            str = str.replace(/\]/g, ".gif />");
            return str;
        };
    
        // 定义暴露get html函数   
        $.fn.jqfaceedit.Html = function(obj) {
            var rContent = $("#" + obj).val();
            rContent = RepHtml(rContent);
            return rContent;
        }
    })(jQuery);
    
     

    html代码如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        
        <link href="Style/global.css" rel="stylesheet" type="text/css" />
        <link href="Style/MasterPage.css" rel="stylesheet" type="text/css" />
        <link href="Style/StyleSheet.css" rel="stylesheet" type="text/css" />
        <script src="js/jquery-1.3.2.js" type="text/javascript"></script>
        <script src="jqfaceedit.js" type="text/javascript"></script>
    
         <script type="text/javascript">
            $(document).ready(function() {
             $("#message_face").jqfaceedit("TextArea1");
    
        });  
        </script>
          <style type="text/css">
            .facebox
        {
                -moz-background-clip: border;
                -moz-background-inline-policy: continuous;
                -moz-background-origin: padding;
                background: #FFFFFF none repeat scroll 0 0;
                border: 1px solid #CCCCCC;
                padding: 8px;
                 250px;
                z-index: 100000;
            }
            .facebox ul li
            {
                float: left;
                height: 25px;
                overflow: hidden;
                 25px;
            }
        </style>
    </head>
    <body>
    <div id="wrapper">
            <!--容器-->
              <div id="main">
                <!--主体-->
    
                <!--end:头部-->
                  <div id="middlebox">
                    <!--中部-->
            
    
        <div class="mainbav">
            <ul>
               
                <li class="nav"><a href="#">留言</a></li>
    
            </ul>
        </div>
        <div class="mes_cl">
            <a href="JavaScript:void(0)" id="message_face">
            <img align="absMiddle" src="js/facelist.gif"></a>
            <textarea class="mes_textarea" rows="2" cols="20" id="TextArea1"></textarea>
            <br>
            <input type="button"  class="mid_but" value="确定"  onclick='alert($("#message_face").jqfaceedit.Html("TextArea1"))'>
            
        </div>
            </div>
        
             </div>
            <!--end: 主体-->
        </div>
    </body>
    </html>

    css有些bug,如果大家需要,可以更改相应的css。

    这边有几个需要注意的:当点击image 的时候,弹出两个层。

       第一个层包含所有的表情图标,第二个层覆盖当前屏幕,用于获取用户在其他地方点击时候的事件捕获。

      对于html的内容替换,主要用正则实现。当然你也可以定义其他的表情代码。

  • 相关阅读:
    HDU_oj_1003 Max Sum
    HDU_oj_1002 A+B Problem Ⅱ
    [php] 表单注意事项
    【网络基础】网速认知
    [php扩展] php安装扩展注意事项
    谷歌管理flash禁用与开启
    [php] 接口及方法和抽象类及方法的异同点
    【php】php 生僻知识点认知
    [mysql] Can't read from messagefile
    redis 散列学习要点记录
  • 原文地址:https://www.cnblogs.com/dooom/p/1848114.html
Copyright © 2011-2022 走看看