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

实现 以下效果
效果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:%;height:150px;}
div a{float:right;padding:10px 20px;font-size: 16px;background:#0f0;color:#fff;}
div a.disable{background: #ccc;color:#;}
</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')[];
var oT = oDiv.getElementsByTagName('textarea')[];
var oA = oDiv.getElementsByTagName('a')[];
//实现效果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')[];
var curLength = Math.ceil(getLength(oT.value) / );
if (curLength <= ) {
oS.innerHTML = - curLength;
} else {
oS.innerHTML = curLength - ;
oS.style.color = 'red';
}
if (curLength <= || curLength > ) {
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 = ;
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 >= ) {
clearTimeout(timer);
num=;
return;
}
if (num % ) {
oT.style.background = 'pink';
} else {
oT.style.background = '';
}
timer = setTimeout(changeBgColor, );
}
timer = setTimeout(changeBgColor, );
} else {
alert('微博已发布!');
}
}, false); }, false);

微博发布框javascript代码

收获:

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

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

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

  1. 如何对Javascript代码进行二次压缩(混淆)

    如何对Javascript代码进行二次压缩(混淆) 对Javascript代码进行压缩(混淆),可以有效减少传输和加载时间.但是,不是所有的变量(方法)都能被混淆的,一般来说,只有非属性的变量(方法) ...

  2. JavaScript基础笔记二

    一.函数返回值1.什么是函数返回值    函数的执行结果2. 可以没有return // 没有return或者return后面为空则会返回undefined3.一个函数应该只返回一种类型的值 二.可变 ...

  3. JavaScript基本概念(二)

    JavaScript 基本概念(二) 操作符和语句 目录 操作符 一元操作符 位操作符 布尔操作符 乘性操作符 其他操作符 语句部分 说起操作符,回忆下上一篇文章末尾说的话. 操作符 一元操作符 ++ ...

  4. 前端笔记之JavaScript面向对象(二)内置构造函数&相关方法|属性|运算符&继承&面向对象

    一.复习 1.1复习上下文 函数的调用方式 上下文 fun() window obj.fun() obj box.onclick = fun box setInterval(fun,1000) set ...

  5. JavaScript学习记录二

    title: JavaScript学习记录二 toc: true date: 2018-09-13 10:14:53 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

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

    JavaScript基于原型的对象机制 JavaScript原型上的哪些事 一.JavaScript基于原型的对象机制 JavaScript对象是基于原型的面向对象机制.在一定程度上js基于原型的对象 ...

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

    一.使用 <script> 元素的方式有两种:直接在页面中嵌入 JavaScript 代码和引用外部 JavaScript 文件. 二.使用内嵌方式,一般写法为: <script t ...

  8. JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里

    JavaScript实现点击按钮弹出输入框,点确定后添加li组件到ul组件里 <!doctype html> <html manifest="lab4.manifest&q ...

  9. 一些有用的javascript实例分析(二)

    原文:一些有用的javascript实例分析(二) 5 求出数组中所有数字的和 window.onload = function () { var oBtn = document.getElement ...

随机推荐

  1. Cent OS 6.6 下安装mysql(5.5.20)和 PHP(5.3.10)

    0.准备步骤(没有连接网络的 linux): 挂载光盘.让网络 yum 源失效.修改光盘 yum 文件.安装 c 语言编译器 gcc. 1.MySQL(5.5.20) 下载 mysql 5.5.20 ...

  2. UITableview xib里面 cell 按钮的回调

    //  MoreBtnCell.m#import <UIKit/UIKit.h> @interface MoreBtnCell : UITableViewCell @property (w ...

  3. RT-Thread相同优先级线程的调度

    /* 静态线程的 线程堆栈*/ ]; ]; /* 静态线程的 线程控制块 */ static struct rt_thread thread_test1; static struct rt_threa ...

  4. flex的Accordion组件头部文本居中显示

    flex的Accordion组件头部文本默认是居左的,可以通过设置headerStyleName属性使之居中,另外还可以设置字体的样式等 <?xml version="1.0" ...

  5. Shell-bash中特殊字符汇总[转]

    转自http://www.linuxidc.com/Linux/2015-08/121217.htm 首先举例一个bash脚本 #!/bin/bash file=$1 files=`find / -n ...

  6. 关于集合的练习P235-1,2,3

    第一题: import java.util.*; public class ListTest { public static void main(String[] args) { ArrayList& ...

  7. 深入理解Javascript闭包 新手版

    一.什么是闭包?  “官方”的解释是:所谓“闭包”,指的是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分. 相信很少有人能直接看懂这句话,因为他描述 ...

  8. (转)常用的js设计模式

    模式是解决或者避免一些问题的方案. 在JavaScript中,会用到一些常用的编码模式.下面就列出了一些常用的JavaScript编码模式,有的模式是为了解决特定的问题,有的则是帮助我们避免一些Jav ...

  9. nrf51822裸机教程-GPIOTE

    GPIO通常都会具有中断功能,上一讲的GPIO中并没有涉及到中断的相关寄存器. 51822将GPIO的中断相关做成了一个单独的模块GPIOTE,这个模块不仅提供了GPIO的中断功能,同时提供了 通过t ...

  10. IAdaptable和IAdaptableFactory(转)

    先记在这里,回头研究下. 原文:http://blog.csdn.net/mini_snow/article/details/3877379 1. 简介和简单的实现 IAdapteable实际上在Ec ...