原生JS写的emoji表情选择器

笔者写这玩意找过n个表情选择器,都用到jquery,移动端实在不合适,因为jquery用min都得90k。而且不需要表情转文字或文字转表情这种功能。

本文用到的是div输入框,且选择表情后是直接往文本内容插入一段html(emoji为svg格式),效果表现是即见即得。

上代码

HTML

<div name="note" class="newpost" id="emojiInput" contenteditable="true"></div>
<div id="face"></div>

CSS

       .emojiSvg {
                width: 2em;
                height: 2em;
            }

            div.newpost {
                text-align: center;
                line-height: 18px;
                font-size: 16px;
                padding: 0px;
                background: #fff;
                width: 100%;
                height: 100px;
                _height: 16px;
                margin-left: auto;
                margin-right: auto;
                margin-bottom: 15px;
                outline: 0;
                word-wrap: break-word;
                overflow-y: hidden;
                z-index: 1000;
                border-bottom: 1px solid #cccccc;
            }

            #face {
                padding: 5px;
            }

JS(如果页面内有其他onload,ready之类,请把本代码放到<head>里)

//生成表情
window.onload = function() {
                var face = document.getElementById(‘face‘);
                for(var i = 0; i < 38; i++) {
                    var a = document.createElement("a");
                    a.href = "javascript:;";
                    if(i < 10) {
                        a.innerHTML = ‘<img class="emojiSvg" src="emoji-svg/1f60‘ + i + ‘.svg"  />‘;
                    } else {
                        a.innerHTML = ‘<img class="emojiSvg" src="emoji-svg/1f6‘ + i + ‘.svg"  />‘;
                    }
                    face.appendChild(a);
                };
            }

            //点击插入表情
            setTimeout(function() {
                var pickers = face.getElementsByTagName(‘a‘);
                var emojiInput = document.getElementById(‘emojiInput‘);
                for(var i = 0; i < pickers.length; i++) {
                    pickers[i].onclick = function(e) {
                       document.getElementById(‘emojiInput‘).focus();
                        insertHtmlAtCaret(this.innerHTML);
                        //    emojiInput.innerHTML+=this.innerHTML;
                    }
                }

                function insertHtmlAtCaret(html) {
                    var sel, range;
                    if(window.getSelection) {
                        // IE9 and non-IE
                        sel = window.getSelection();
                        if(sel.getRangeAt && sel.rangeCount) {
                            range = sel.getRangeAt(0);
                            range.deleteContents();
                            // Range.createContextualFragment() would be useful here but is
                            // non-standard and not supported in all browsers (IE9, for one)
                            var el = document.createElement("div");
                            el.innerHTML = html;
                            var frag = document.createDocumentFragment(),
                                node, lastNode;
                            while((node = el.firstChild)) {
                                lastNode = frag.appendChild(node);
                            }
                            range.insertNode(frag);
                            // Preserve the selection
                            if(lastNode) {
                                range = range.cloneRange();
                                range.setStartAfter(lastNode);
                                range.collapse(true);
                                sel.removeAllRanges();
                                sel.addRange(range);
                            }
                        }
                    } else if(document.selection && document.selection.type != "Control") {
                        // IE < 9
                        document.selection.createRange().pasteHTML(html);
                    }
                }
            }, 500);
时间: 2024-10-19 12:49:26

原生JS写的emoji表情选择器的相关文章

原生JS写的ajax函数

参照JQuery中的ajax功能,用原生JS写了一个ajax,功能相对JQuery要少很多,不过基本功能都有,包括JSONP. 调用的方式分为两种: 1. ajax(url, {}); 2. ajax({}); 调用的方法参照JQuery的ajax,只是 不需要写$.ajax ,只需要写 ajax 就可以了. 代码如下: !function () { var jsonp_idx = 1; return ajax = function (url, options) { if (typeof url

用原生JS写移动动画案例及实际应用

js很强大 相信很多人都知道,那么它有哪些强大之处呢?有兴趣的人可以去查查,这里就不赘述了,因为不在本片文章讨论的范围. 我们要讲的是怎么用原生JS写移动动画?我们先举一个最简单的动画例子,很多网站的左边或右边会有个分享的框,鼠标放上去就还移出一个列表,里面是要分享的地址.鼠标移开,就会移进去. 要实现这个效果要怎么做呢? 可以想一想,鼠标经过和鼠标离开很好理解 用onmousemove事件和onmouseout事件就能完成. 那移动动画呢?我们可以一步一步思考, 首先,一开始是这样的 完成移动

原生js写的一个弧形菜单插件

弧形菜单是一种半弧式或者全弧形菜单,是一种不同于传统横向或者竖向菜单形式的菜单.最近在网上看到好多人写出了这种效果,于是也尝试自己写了一个. 实现方式:原生态js 主要结构: 1.参数合并 1 var defaultPra = { 2 mainMenuId: "ArcMenu",//主菜单id 3 menuBoxId:"menuBox",//菜单包裹id 4 position: "",//弧形菜单 5 customPosition:"0

原生js写的贪吃蛇网页版游戏

<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> <title>原生js写的贪吃蛇网页版游戏</title> </head> <body><div><A href="http://www.999jiujiu.com/">h

使用原生js写ajax

// 使用原生js 封装ajax // 兼容xhr对象 function createXHR(){ if(typeof XMLHttpRequest != "undefined"){ // 非IE6浏览器 return new XMLHttpRequest(); }else if(typeof ActiveXObject != "undefined"){ // IE6浏览器 var version = [ "MSXML2.XMLHttp.6.0"

原生js写个简单的数字键盘(by vczero)

一.起因 最近支付的同事说,数字键盘有些问题:在移动设备上有时候比较难出现点(.) 和数字在一起的格局:因此,考虑到这种情况,就建议手写个模拟键盘了.花了一晚上的时间,写了个简单的键盘,基本能用.考虑到有的开发者没有使用juqery,就使用原生的js了. Github地址:https://github.com/vczero/keyboard 二.截图如下 三.体验地址(需要点击input才能弹出数字键盘的哦) URL: http://vczero.github.io/num_key/index.

原生JS写Ajax的请求函数

原文:http://caibaojian.com/ajax-jsonp.html 一.JS原生ajax ajax:一种请求数据的方式,不需要刷新整个页面:ajax的技术核心是 XMLHttpRequest 对象:ajax 请求过程:创建 XMLHttpRequest 对象.连接服务器.发送请求.接收响应数据: 下面简单封装一个函数,之后稍作解释 1 ajax({ url: "./TestXHR.aspx", //请求地址 2 type: "POST", //请求方式

原生js写简单轮播图方式1-从左向右滑动

轮播图就是让图片每隔几秒自动滑动,达到图片轮流播放的效果.轮播图从效果来说有滑动式的也有渐入式的,滑动式的轮播图就是图片从左向右滑入的效果,渐入式的轮播图就是图片根据透明度渐渐显示的效果,这里说的是实现第一种效果的方法. 原理 相同大小的图片并成一列,但只显示其中一张图片,其余的隐藏,通过修改left值来改变显示的图片.点击查看效果 html部分 nav为总容器,第一个ul列表#index为小圆点列表,鼠标覆盖哪个小圆点就显现第几张图片,on是一个给小圆点添加背景颜色属性的类:第二个ul列表#i

原生js写ajax请求(复习)

今天本地想测试一个接口,不想用框架想用js快速完成,突然发现,我居然忘了这个最基本的代码.好吧,只能复习一波. 在框架泛滥的今天,用惯$.ajax(),axios,superAgent等框架的你们,还能清晰记得原生ajax的写法吗? XMLHttpRequest 对象 先来复习一下XMLHttpRequest 对象, 方    法 描    述 abort() 停止当前请求  getAllResponseHeaders() 把HTTP请求的所有响应首部作为键/值对返回 getResponseHe