zoukankan      html  css  js  c++  java
  • [读码时间] 仿腾讯微博效果

    说明:代码取自网络,注释为原文所有!

    <!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>
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title>仿腾讯微博效果</title>
        <style type="text/css">
            body, div, h2, h3, ul, li, p {
                margin: 0;
                padding: 0;
            }
    
            a {
                text-decoration: none;
            }
    
                a:hover {
                    text-decoration: underline;
                }
    
            ul {
                list-style-type: none;
            }
    
            body {
                color: #333;
                background: #3c3a3b;
                font: 12px/1.5 5b8b4f53;
            }
    
            #msgBox {
                width: 500px;
                background: #fff;
                border-radius: 5px;
                margin: 10px auto;
                padding-top: 10px;
            }
    
                #msgBox form h2 {
                    font-weight: 400;
                    font: 400 18px/1.5 5fae8f6f96c59ed1;
                }
    
                #msgBox form {
                    background: url(img/boxBG.jpg) repeat-x 0 bottom;
                    padding: 0 20px 15px;
                }
    
            #userName, #conBox {
                color: #777;
                border: 1px solid #d0d0d0;
                border-radius: 6px;
                background: #fff url(img/inputBG.png) repeat-x;
                padding: 3px 5px;
                font: 14px/1.5 arial;
            }
    
                #userName.active, #conBox.active {
                    border: 1px solid #7abb2c;
                }
    
            #userName {
                height: 20px;
            }
    
            #conBox {
                width: 448px;
                resize: none;
                height: 65px;
                overflow: auto;
            }
    
            #msgBox form div {
                position: relative;
                color: #999;
                margin-top: 10px;
            }
    
            #msgBox img {
                border-radius: 3px;
            }
    
            #face {
                position: absolute;
                top: 0;
                left: 172px;
            }
    
                #face img {
                    width: 30px;
                    height: 30px;
                    cursor: pointer;
                    margin-right: 6px;
                    opacity: 0.5;
                    filter: alpha(opacity=50);
                }
    
                    #face img.hover, #face img.current {
                        width: 28px;
                        height: 28px;
                        border: 1px solid #f60;
                        opacity: 1;
                        filter: alpha(opacity=100);
                    }
    
            #sendBtn {
                border: 0;
                width: 112px;
                height: 30px;
                cursor: pointer;
                margin-left: 10px;
                background: url(img/btn.png) no-repeat;
            }
    
                #sendBtn.hover {
                    background-position: 0 -30px;
                }
    
            #msgBox form .maxNum {
                font: 26px/30px Georgia, Tahoma, Arial;
                padding: 0 5px;
            }
    
            #msgBox .list {
                padding: 10px;
            }
    
                #msgBox .list h3 {
                    position: relative;
                    height: 33px;
                    font-size: 14px;
                    font-weight: 400;
                    background: #e3eaec;
                    border: 1px solid #dee4e7;
                }
    
                    #msgBox .list h3 span {
                        position: absolute;
                        left: 6px;
                        top: 6px;
                        background: #fff;
                        line-height: 28px;
                        display: inline-block;
                        padding: 0 15px;
                    }
    
                #msgBox .list ul {
                    overflow: hidden;
                    zoom: 1;
                }
    
                    #msgBox .list ul li {
                        float: left;
                        clear: both;
                        width: 100%;
                        border-bottom: 1px dashed #d8d8d8;
                        padding: 10px 0;
                        background: #fff;
                        overflow: hidden;
                    }
    
                        #msgBox .list ul li.hover {
                            background: #f5f5f5;
                        }
    
                #msgBox .list .userPic {
                    float: left;
                    width: 50px;
                    height: 50px;
                    display: inline;
                    margin-left: 10px;
                    border: 1px solid #ccc;
                    border-radius: 3px;
                }
    
                #msgBox .list .content {
                    float: left;
                    width: 400px;
                    font-size: 14px;
                    margin-left: 10px;
                    font-family: arial;
                    word-wrap: break-word;
                }
    
                #msgBox .list .userName {
                    display: inline;
                    padding-right: 5px;
                }
    
                    #msgBox .list .userName a {
                        color: #2b4a78;
                    }
    
                #msgBox .list .msgInfo {
                    display: inline;
                    word-wrap: break-word;
                }
    
                #msgBox .list .times {
                    color: #889db6;
                    font: 12px/18px arial;
                    margin-top: 5px;
                    overflow: hidden;
                    zoom: 1;
                }
    
                    #msgBox .list .times span {
                        float: left;
                    }
    
                    #msgBox .list .times a {
                        float: right;
                        color: #889db6;
                        display: none;
                    }
    
            .tr {
                overflow: hidden;
                zoom: 1;
            }
    
                .tr p {
                    float: right;
                    line-height: 30px;
                }
    
                .tr * {
                    float: left;
                }
        </style>
        <script type="text/javascript">
    /*-------------------------- +
      获取id, class, tagName
     +-------------------------- */
    var get = {
        byId: function(id) {
            return typeof id === "string" ? document.getElementById(id) : id
        },
        byClass: function(sClass, oParent) {
            var aClass = [];
            var reClass = new RegExp("(^| )" + sClass + "( |$)");
            var aElem = this.byTagName("*", oParent);
            for (var i = 0; i < aElem.length; i++) reClass.test(aElem[i].className) && aClass.push(aElem[i]);
            return aClass
        },
        byTagName: function(elem, obj) {
            return (obj || document).getElementsByTagName(elem)
        }
    };
    /*-------------------------- +
      事件绑定, 删除
     +-------------------------- */
    var EventUtil = {
        addHandler: function (oElement, sEvent, fnHandler) {
            oElement.addEventListener ? oElement.addEventListener(sEvent, fnHandler, false) : (oElement["_" + sEvent + fnHandler] = fnHandler, oElement[sEvent + fnHandler] = function () {oElement["_" + sEvent + fnHandler]()}, oElement.attachEvent("on" + sEvent, oElement[sEvent + fnHandler]))
        },
        removeHandler: function (oElement, sEvent, fnHandler) {
            oElement.removeEventListener ? oElement.removeEventListener(sEvent, fnHandler, false) : oElement.detachEvent("on" + sEvent, oElement[sEvent + fnHandler])
        },
        addLoadHandler: function (fnHandler) {
            this.addHandler(window, "load", fnHandler)
        }
    };
    /*-------------------------- +
      设置css样式
      读取css样式
     +-------------------------- */
    function css(obj, attr, value)
    {
        switch (arguments.length)
        {
            case 2:
                if(typeof arguments[1] == "object")
                {
                    for (var i in attr) i == "opacity" ? (obj.style["filter"] = "alpha(opacity=" + attr[i] + ")", obj.style[i] = attr[i] / 100) : obj.style[i] = attr[i];
                }
                else
                {
                    return obj.currentStyle ? obj.currentStyle[attr] : getComputedStyle(obj, null)[attr]
                }
                break;
            case 3:
                attr == "opacity" ? (obj.style["filter"] = "alpha(opacity=" + value + ")", obj.style[attr] = value / 100) : obj.style[attr] = value;
                break;
        }
    };
    
    EventUtil.addLoadHandler(function ()
    {
        var oMsgBox = get.byId("msgBox");
        var oUserName = get.byId("userName");
        var oConBox = get.byId("conBox");
        var oSendBtn = get.byId("sendBtn");
        var oMaxNum = get.byClass("maxNum")[0];
        var oCountTxt = get.byClass("countTxt")[0];
        var oList = get.byClass("list")[0];
        var oUl = get.byTagName("ul", oList)[0];
        var aLi = get.byTagName("li", oList);
        var aFtxt = get.byClass("f-text", oMsgBox);
        var aImg = get.byTagName("img", get.byId("face"));
        var bSend = false;
        var timer = null;
        var oTmp = "";
        var i = 0;
        var maxNum = 140;
    
        //禁止表单提交
        EventUtil.addHandler(get.byTagName("form", oMsgBox)[0], "submit", function () {return false});
    
        //为广播按钮绑定发送事件
        EventUtil.addHandler(oSendBtn, "click", fnSend);
    
        //为Ctrl+Enter快捷键绑定发送事件
        EventUtil.addHandler(document, "keyup", function(event)
        {
            var event = event || window.event;
            event.ctrlKey && event.keyCode == 13 && fnSend()
        });
    
        //发送广播函数
        function fnSend ()
        {
            var reg = /^s*$/g;
            if(reg.test(oUserName.value))
            {
                alert("u8bf7u586bu5199u60a8u7684u59d3u540d");
                oUserName.focus()
            }
            else if(!/^[u4e00-u9fa5w]{2,8}$/g.test(oUserName.value))
            {
                alert("u59d3u540du75312-8u4f4du5b57u6bcdu3001u6570u5b57u3001u4e0bu5212u7ebfu3001u6c49u5b57u7ec4u6210uff01");
                oUserName.focus()
            }
            else if(reg.test(oConBox.value))
            {
                alert("u968fu4fbfu8bf4u70b9u4ec0u4e48u5427uff01");
                oConBox.focus()
            }
            else if(!bSend)
            {
                alert("u4f60u8f93u5165u7684u5185u5bb9u5df2u8d85u51fau9650u5236uff0cu8bf7u68c0u67e5uff01");
                oConBox.focus()
            }
            else
            {
                var oLi = document.createElement("li");
                var oDate = new Date();
                oLi.innerHTML = "<div class="userPic"><img src="" + get.byClass("current", get.byId("face"))[0].src + ""></div>
                                 <div class="content">
                                     <div class="userName"><a href="javascript:;">" + oUserName.value + "</a>:</div>
                                    <div class="msgInfo">" + oConBox.value.replace(/<[^>]*>|&nbsp;/ig, "") + "</div>
                                    <div class="times"><span>" + format(oDate.getMonth() + 1) + "u6708" + format(oDate.getDate()) + "u65e5 " + format(oDate.getHours()) + ":" + format(oDate.getMinutes()) + "</span><a class="del" href="javascript:;">u5220u9664</a></div>
                                 </div>";
                //插入元素
                aLi.length ? oUl.insertBefore(oLi, aLi[0]) : oUl.appendChild(oLi);
    
                //重置表单
                get.byTagName("form", oMsgBox)[0].reset();
                for (i = 0; i < aImg.length; i++) aImg[i].className = "";
                aImg[0].className = "current";
    
                //将元素高度保存
                var iHeight = oLi.clientHeight - parseFloat(css(oLi, "paddingTop")) - parseFloat(css(oLi, "paddingBottom"));
                var alpah = count = 0;
                css(oLi, {"opacity" : "0", "height" : "0"});
                timer = setInterval(function ()
                {
                    css(oLi, {"display" : "block", "opacity" : "0", "height" : (count += 8) + "px"});
                    if (count > iHeight)
                    {
                        clearInterval(timer);
                        css(oLi, "height", iHeight + "px");
                        timer = setInterval(function ()
                        {
                            css(oLi, "opacity", (alpah += 10));
                            alpah > 100 && (clearInterval(timer), css(oLi, "opacity", 100))
                        },30)
                    }
                },30);
                //调用鼠标划过/离开样式
                liHover();
                //调用删除函数
                delLi()
            }
        };
    
        //事件绑定, 判断字符输入
        EventUtil.addHandler(oConBox, "keyup", confine);
        EventUtil.addHandler(oConBox, "focus", confine);
        EventUtil.addHandler(oConBox, "change", confine);
    
        //输入字符限制
        function confine ()
        {
            var iLen = 0;
            for (i = 0; i < oConBox.value.length; i++) iLen += /[^x00-xff]/g.test(oConBox.value.charAt(i)) ? 1 : 0.5;
            oMaxNum.innerHTML = Math.abs(maxNum - Math.floor(iLen));
            maxNum - Math.floor(iLen) >= 0 ? (css(oMaxNum, "color", ""), oCountTxt.innerHTML = "u8fd8u80fdu8f93u5165", bSend = true) : (css(oMaxNum, "color", "#f60"), oCountTxt.innerHTML = "u5df2u8d85u51fa", bSend = false)
        }
        //加载即调用
        confine();
    
        //广播按钮鼠标划过样式
        EventUtil.addHandler(oSendBtn, "mouseover", function () {this.className = "hover"});
    
        //广播按钮鼠标离开样式
        EventUtil.addHandler(oSendBtn, "mouseout", function () {this.className = ""});
    
        //li鼠标划过/离开处理函数
        function liHover()
        {
            for (i = 0; i < aLi.length; i++)
            {
                //li鼠标划过样式
                EventUtil.addHandler(aLi[i], "mouseover", function (event)
                {
                    this.className = "hover";
                    oTmp = get.byClass("times", this)[0];
                    var aA = get.byTagName("a", oTmp);
                    if (!aA.length)
                    {
                        var oA = document.createElement("a");
                        oA.innerHTML = "删除";
                        oA.className = "del";
                        oA.href = "javascript:;";
                        oTmp.appendChild(oA)
                    }
                    else
                    {
                        aA[0].style.display = "block";
                    }
                });
    
                //li鼠标离开样式
                EventUtil.addHandler(aLi[i], "mouseout", function ()
                {
                    this.className = "";
                    var oA = get.byTagName("a", get.byClass("times", this)[0])[0];
                    oA.style.display = "none"
                })
            }
        }
        liHover();
    
        //删除功能
        function delLi()
        {
            var aA = get.byClass("del", oUl);
    
            for (i = 0; i < aA.length; i++)
            {
                aA[i].onclick = function ()
                {
                    var oParent = this.parentNode.parentNode.parentNode;
                    var alpha = 100;
                    var iHeight = oParent.offsetHeight;
                    timer = setInterval(function ()
                    {
                        css(oParent, "opacity", (alpha -= 10));
                        if (alpha < 0)
                        {
                            clearInterval(timer);
                            timer = setInterval(function ()
                            {
                                iHeight -= 10;
                                iHeight < 0 && (iHeight = 0);
                                css(oParent, "height", iHeight + "px");
                                iHeight == 0 && (clearInterval(timer), oUl.removeChild(oParent))
                            },30)
                        }
                    },30);
                    this.onclick = null
                }
            }
        }
        delLi();
    
        //输入框获取焦点时样式
        for (i = 0; i < aFtxt.length; i++)
        {
            EventUtil.addHandler(aFtxt[i], "focus", function ()    {this.className = "active"});
            EventUtil.addHandler(aFtxt[i], "blur", function () {this.className = ""})
        }
    
        //格式化时间, 如果为一位数时补0
        function format(str)
        {
            return str.toString().replace(/^(d)$/,"0$1")
        }
    
        //头像
        for (i = 0; i < aImg.length; i++)
        {
            aImg[i].onmouseover = function ()
            {
                this.className += " hover"
            };
            aImg[i].onmouseout = function ()
            {
                this.className = this.className.replace(/s?hover/,"")
            };
            aImg[i].onclick = function ()
            {
                for (i = 0; i < aImg.length; i++) aImg[i].className = "";
                this.className = "current"
            }
        }
    });
        </script>
    </head>
    <body>
        <div id="msgBox">
            <form>
                <h2>来 , 说说你在做什么 , 想什么</h2>
                <div>
                    <input id="userName" class="f-text" value="" />
                    <p id="face"><img src="img/face1.gif" class="current" /><img src="img/face2.gif" /><img src="img/face3.gif" /><img src="img/face4.gif" /><img src="img/face5.gif" /><img src="img/face6.gif" /><img src="img/face7.gif" /><img src="img/face8.gif" /></p>
                </div>
                <div><textarea id="conBox" class="f-text"></textarea></div>
                <div class="tr">
                    <p>
                        <span class="countTxt">还能输入</span><strong class="maxNum">140</strong><span>个字</span>
                        <input id="sendBtn" type="button" value="" title="快捷键 Ctrl+Enter" />
                    </p>
                </div>
            </form>
            <div class="list">
                <h3><span>大家在说</span></h3>
                <ul>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">新增删除广播功能。</div>
                            <div class="times"><span>07月05日 15:14</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">新增Ctrl+Enter快捷键发送广播。</div>
                            <div class="times"><span>07月05日 12:20</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">新增选择头像功能。</div>
                            <div class="times"><span>07月05日 12:08</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">增加了记录广播时间的功能。</div>
                            <div class="times"><span>07月04日 16:55</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">增加了输入字符检测功能,英文/半角为半个字符,汉字/全角为一个字符。</div>
                            <div class="times"><span>07月04日 08:30</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                    <li>
                        <div class="userPic"><img src="img/face.gif" /></div>
                        <div class="content">
                            <div class="userName"><a href="javascript:;">日丶久生情</a>:</div>
                            <div class="msgInfo">仿腾讯微博效果,欢迎大家测试!</div>
                            <div class="times"><span>07月03日 20:19</span><a class="del" href="javascript:;">删除</a></div>
                        </div>
                    </li>
                </ul>
            </div>
        </div>
    </body>
    </html>
    View Code
  • 相关阅读:
    预习作业一
    20145234黄斐《java程序设计基础》第一周
    预习作业3
    开源 人脸识别 openface 实用介绍 实例演示 训练自己的模型
    ubuntu 开机 输入密码 无法进入
    linux anaconda 管理 python 包
    如何从零开始做一个蓝牙机械键盘
    keil中结构体跨文件调用
    GPRS 通信
    如何查找EI 及SCI 索引
  • 原文地址:https://www.cnblogs.com/sx00xs/p/6488048.html
Copyright © 2011-2022 走看看