javascript实例学习之二——类新浪微博的输入框

该案例实现如下效果,具体可见新浪微博网站的微博发布框

实现 以下效果
效果1:当光标移入文本框时,文本框上方的文字发生变化,显示剩余可以输入的字数,当光标移出文本框,并且文本框中没有任何输入时,恢复最初默认的文字

效果2:文本输入的时候,文本框提示剩余文本数,剩余文本字数随着输入字数而减少,两个字母算一个字,一个汉字算一个字

效果3:当输入框为空,或者输入框内的文本超过140个字的时候,发布按钮不可用,否则可用;在发布按钮不可用的情况下点击发布按钮,文本框会出现红色背景,并闪动两次

对应的html代码:

<!DOCTYPE html>
<html lang="zh_CN">
<head>
    <meta charset="UTF-8">
    <title>微博发布框效果</title>
    <style>
        body{font-size: 12px}
        div{width:400px;margin:20px auto;}
        div p{float:right; }
        div textarea{width:100%;height:150px;}
        div a{float:right;padding:10px 20px;font-size: 16px;background:#0f0;color:#fff;}
        div a.disable{background: #ccc;color:#666;}
    </style>
</head>
<body>
    <div id="div1">
        <p>他们都在读什么?企业#大咖私藏书单#,领导者的思想盛宴 </p>
        <textarea name="" id=""  ></textarea>
        <a href="#" class="disable">发布</a>
    </div>
    <script src="js/weiboInput.js"></script>
</body>
</html>

微博发布框html代码

对应的javascript代码:

//实现 以下效果
//效果1:当光标移入文本框时,文本框上方的文字发生变化,显示剩余可以输入的字数
//当光标移出文本框,并且文本框中没有任何输入时,恢复最初默认的文字

//效果2:文本输入的时候,文本框提示剩余文本数,剩余文本字数随着输入字数而减少,两个字母算一个字,一个汉字算一个字

//效果3:当输入框为空,或者输入框内的文本超过140个字的时候,发布按钮不可用,否则可用;在发布按钮不可用的情况下点击发布按钮,文本框会出现红色背景,并闪动两次

document.addEventListener(‘DOMContentLoaded‘, function() {
    var oDiv = document.getElementById(‘div1‘);
    var oP = oDiv.getElementsByTagName(‘p‘)[0];
    var oT = oDiv.getElementsByTagName(‘textarea‘)[0];
    var oA = oDiv.getElementsByTagName(‘a‘)[0];
    //实现效果1
    oT.addEventListener(‘focus‘, function() {
        oP.innerHTML = "还可以输入<span>140</span>个字";
    }, false);
    oT.addEventListener(‘blur‘, function() {
        if (!this.value) {
            oP.innerHTML = "他们都在读什么?企业#大咖私藏书单#,领导者的思想盛宴";
        }

    }, false);

    //实现效果2,连续输入在标准下触发的是input事件,在ie中触发的是onproperty事件
    oT.addEventListener(‘input‘, function() {

        var oS = oDiv.getElementsByTagName(‘span‘)[0];
        var curLength = Math.ceil(getLength(oT.value) / 2);
        if (curLength <= 140) {
            oS.innerHTML = 140 - curLength;
        } else {
            oS.innerHTML = curLength - 140;
            oS.style.color = ‘red‘;
        }
        if (curLength <= 0 || curLength > 140) {
            oA.className = ‘disable‘;
        } else {
            oA.className = ‘‘;
        }

    }, false);

    function getLength(str) {
        return str.replace(/[^\x00-\xff]/g, ‘aa‘).length;
    }

    //实现效果3

    oA.addEventListener(‘click‘, function() {
        var timer;
        var num = 0;
        if (oA.className === ‘disable‘) {
            //文本框的背景变成红色并且闪动两次
            // clearInterval(timer);
            // timer = setInterval(function() {
            //     num++;
            //     if (num == 4) {
            //         clearInterval(timer);
            //         num = 0;
            //     }
            //     if (num % 2) {
            //         oT.style.background = ‘pink‘;
            //     } else {
            //         oT.style.background = ‘‘;
            //     }

            // }, 150);

            //尝试利用超时调用来模拟间歇调用
            clearTimeout(timer);

            function changeBgColor() {

                num++;
                if (num >= 5) {
                    clearTimeout(timer);
                    num=0;
                    return;
                }
                if (num % 2) {
                    oT.style.background = ‘pink‘;
                } else {
                    oT.style.background = ‘‘;
                }
                timer = setTimeout(changeBgColor, 150);
            }
            timer = setTimeout(changeBgColor, 150);
        } else {
            alert(‘微博已发布!‘);
        }
    }, false);

}, false);

微博发布框javascript代码

收获:

1.背景闪动!联系动画!

2.文本框连续输入事件,ie下是onpropertychange,标准下是input

时间: 2024-11-07 15:51:51

javascript实例学习之二——类新浪微博的输入框的相关文章

Javascript使用function创建类的两种方法

1.使用function类 //myFunction.js var CMyFunc=function() { //类的公共方法,供外部调用 this.Func1=function() { var i=0; return i; } this.Func2=function() { _privateFunc(); } //类中的私有方法,供公共方法调用 function _privateFunc() { return 0; ] } CMyFunc myFunc=new CMyFunc(); 使用:其它

深入JavaScript对象(Object)与类(class),详细了解类、原型

JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象机制依然维持了类的基本特征:抽象.封装.继承.多态.面向类的设计模式:实例化.继承.多态,这些无法直接对应到JavaScript的对象机制.与强类型语言的类相对应的是JavaScript的原型,所以,只能是基于原型来模拟实现类的设计模式. 为了便于理解,这里采用了Function构造函数及对象原型链

基础JavaScript练习(二)总结

任务目的 学习与实践JavaScript的基本语法.语言特性 练习使用JavaScript实现简单的排序算法 任务描述 基于上一任务 限制输入的数字在10-100 队列元素数量最多限制为60个,当超过60个时,添加元素时alert出提示 队列展现方式变化如图,直接用高度表示数字大小 实现一个简单的排序功能,如冒泡排序(不限制具体算法),用可视化的方法表达出来,参考见下方参考资料 任务注意事项 实现简单功能的同时,请仔细学习JavaScript基本语法.事件.DOM相关的知识 请注意代码风格的整齐

初始JavaScript Promises之二

初始JavaScript Promises之二 上一篇我们初步学习了JavaScript Promises,本篇将介绍Promise如何优雅地进行错误处理以及提升操作node.js风格1的异步方法的逼格,没错就是使用promisify2. 异步编程中的错误处理 人性的.理想的也正如很多编程语言中已经实现的错误处理方式应该是这样: try {     var val = JSON.parse(fs.readFileSync("file.json")); }catch(SyntaxErro

javascript笔记(二)

concat() 连接多个字符串,返回合并后的字符串. 1 var s1="a"; 2 var s2="b"; 3 var s3="c"; 4 5 console.log(s1.concat(s2,s3));//abc concat() 方法的结果等同于:result = s1 + s2 + ... + sN.如果有不是字符串的参数,则它们在连接之前将首先被转换为字符串. 数组中的concat():将参数添加为数组的元素,返回新的数组. 1 va

零基础JavaScript编码(二)

任务目的 在上一任务基础上继续JavaScript的体验 学习JavaScript中的if判断语法,for循环语法 学习JavaScript中的数组对象 学习如何读取.处理数据,并动态创建.修改DOM中的内容 任务描述 参考以下示例代码,页面加载后,将提供的空气质量数据数组,按照某种逻辑(比如空气质量大于60)进行过滤筛选,最后将符合条件的数据按照一定的格式要求显示在网页上 <!DOCTYPE html> <html> <head> <meta charset=&

JavaScript 入门教程二 在HTML中使用 JavaScript

一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script type="text/javascript"> /*  code   */ </script> 三.引用外部 JavaScript 文件的一般写法为: <script type="text/javascript" src=""&

Functions类,一个Javascript的函数加法类,将两个函数加起来,顺序执行

以下是类的代码: 1 var Functions = { 2 oFunctions: null, 3 add: function (oFunc, oNewFunc) { 4 var oNew = function () { 5 oFunc(); 6 oNewFunc(); 7 }; 8 return oNew; 9 } 10 }; 以下是测试代码: 1 function one() { 2 alert(1); 3 } 4 5 function two() { 6 alert(2); 7 } 8

javascript 学习小结 (二) by FungLeo

javascript 学习小结 (二) by FungLeo 前言 前面写过一个学习小结javascript 学习小结 JS装逼技巧(一) by FungLeo 那篇博文总结的东西还是比较多的. 但是JS有很多的内容,都是很有用的知识点,不可能一下子记住.因此,我的学习小结的会一直更新. 因为学习进度的不同,可能每篇博文的长短也不一样,有的学的东西多,就长点. 查询某个字符串在某个数组中的索引值 笨方法 我的基础比较差,所以很多东西是记不住的.因此,我在需要这样做的时候,我写了如下代码 var