1. 缓动函数中opcity  写百分值的值
  2. JS一般不用小数运算,会照成精度丢失
  3. 元素的默*认透明度是
  4. 层级一次性赋值,不缓动
  5. 利用for…in为同一个父元素的子元素绑定属性

缓动框架兼容封装/回掉函数/兼容透明度/层级

 function animate(ele,json,fn){
//先清定时器
clearInterval(ele.timer);
ele.timer = setInterval(function () {
//开闭原则
var bool = true; //遍历属性和值,分别单独处理json
//attr == k(键) target == json[k](值)
for(var k in json){
//四部
var leader;
//判断如果属性为opacity的时候特殊获取值
if(k === "opacity"){
leader = getStyle(ele,k)*100 || 1;
}else{
leader = parseInt(getStyle(ele,k)) || 0;
} //1.获取步长
var step = (json[k] - leader)/10;
//2.二次加工步长
step = step>0?Math.ceil(step):Math.floor(step);
leader = leader + step;
//3.赋值
//特殊情况特殊赋值
if(k === "opacity"){
ele.style[k] = leader/100;
//兼容IE678
ele.style.filter = "alpha(opacity="+leader+")";
//如果是层级,一次行赋值成功,不需要缓动赋值
//为什么?需求!
}else if(k === "zIndex"){
ele.style.zIndex = json[k];
}else{
ele.style[k] = leader + "px";
}
//4.清除定时器
//判断: 目标值和当前值的差大于步长,就不能跳出循环
//不考虑小数的情况:目标位置和当前位置不相等,就不能清除清除定时器。
if(json[k] !== leader){
bool = false;
}
} console.log(1);
//只有所有的属性都到了指定位置,bool值才不会变成false;
if(bool){
clearInterval(ele.timer);
//所有程序执行完毕了,现在可以执行回调函数了
//只有传递了回调函数,才能执行
if(fn){
fn();
}
}
},25);
} //兼容方法获取元素样式
function getStyle(ele,attr){
if(window.getComputedStyle){
return window.getComputedStyle(ele,null)[attr];
}
return ele.currentStyle[attr];
}

旋转轮播图

http://mingm.top/demo/04-旋转轮播图/demo.html

https://github.com/q878067583/mingm/tree/gh-pages/demo/04-旋转轮播图

在数组json中,删除第一个元素,添加到最末尾。(正转)

在数组json中,删除最后一个元素,添加到第一位。(反转)

正则表达式:

本质:用来记录文本规则的代码,

可以迅速地用极简单的方式达到字符串的复杂控制。

Regular Expression

  定义方法

    var reg = new RegExp (/abs/) ;

    var reg = /abc/ ;

  

Boolean = 表达式.test("要验证的内容");检测是否符合正则表达式“reg”的要求,并返回true/false ;

正则表达式的组成是:(总结)

有一些普通字符和元字符组成,普通字符就是字母和数字,元字符具有特殊意义的字符

匹配腾讯QQ号:[1-9][0-9]{4,}

评注:腾讯QQ号从10000开始

比如  \d

预定义类: 表示数字   [0-9]

正则内部类:

    预定义类

      .   [^\n\r] 除了换行和回车之外的任意字符

      \d  [0-9] 数字字符  \s [\t\n\x0B\f\r] 空白字符.    \w [a-zA-Z_0-9] 单词字符

      \D     [^0-9]非数字字符 \S [^\t\n\x0B\f\r] 非空白字符 \W [^a-zA-Z_0-9] 非单词字符

简单类(正则://中什么特殊符号都不写,和[]的加入)

  /string/.test(“string”);            必须是完整的,只多不能少

  /andy/.test(“andy”) // true

一句话,只要完整包含了andy 就可以了(有他就行)

/[string]/.test(“string”);   只要包含里面的任何一个就可以

负向类

  /[^abc]/.test(ds):不能含有abc任意一个字符

  1. 不够和正好返回false,多了返回true
        1. /[^abc]/.test(“aiiiii”)返回true
        2. /[^abc]/.test(“a”)返回fals

范围类

有时匹配的东西过多,而且类型又相同,全部输入太麻烦,我们可以在中间加了个横线

console.log(/[a-z]/.test('1111'));

console.log(/[A-Z]/.test('aa'));

组合类

用中括号匹配不同类型的单个字符。

console.log(/[a-m1-5]/.test("b"))//true

正则边界:

  

  ^ 会匹配行或者字符串的起始位置

  注:^在[]中才表示非!这里表示开始

  $ 会匹配行或字符串的结尾位置

  ^$在一起 表示必须是这个(精确匹配)

// 边界可以精确说明要什么
console.log(/lily/.test("lilyname")); // true
console.log(/^lily$/.test("lily"));  // true
console.log(/^lily$/.test("ly"));   // false

console.log(/^andy$/.test("andy"));  // true

这个的最终意思就是 说, 必须是 andy 这四个字母

量词:

  

(多个字母,重复最后一个)

*   (贪婪)   重复零次或更多   (>=0)

+   (懒惰)   重复一次或更多次  (>=1)

?    (占有)   重复零次或一次   (0||1)  要么有 要么没有

{}  重复多少次的意思   可以有多少个

您的银行卡密码只能是 6位      {6}

{n} n次 (x=n)

{n,} 重复n次或更多  (x>=n)

{n,m} 重复出现的次数比n多但比m少 (n<=x<=m)

*    {0,}

+     {1,}

?     {0,1}

x|y    一个 |   x  或者 y(没有&,用的是,代替的)

()提高权限,有限计算

replace() 去除空格,

 var str = "     你好,我      很好!      ";
console.log(str);
// console.log(str.trim());
console.log(trim(str));
function trim(str){
var aaa = str.replace(/(^\s+)|(\s+$)/g,"");
return aaa;
}

表单验证css模版

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<style type="text/css">
body {
background: #ccc;
} label {
width: 40px;
display: inline-block;
} .container {
margin: 100px auto;
width: 400px;
padding: 50px;
line-height: 40px;
border: 1px solid #999;
background: #efefef;
} span {
margin-left: 30px;
font-size: 12px;
padding:2px 20px 0;
color: #ccc;
} .wrong {
color: red;
background: url(images/error.png) no-repeat; } .right {
color: green;
background: url(images/right.png) no-repeat;
} .pwd {
width: 220px;
height: 20px;
background: url("images/strong.jpg") no-repeat;
}
.str1{
background-position: 0 -20px;
}
.str2{
background-position: 0 -40px;
}
.str3{
background-position: 0 -60px;
}
.str4{
background-position: 0 -80px;
}
</style> <script>
window.onload = function () {
//需求:按照需求,对表单数据进行校验!
//步骤:
//1.老三步
//2.判断是否符合正则标准
//3.给样式。(封装方法给) // var inp1 = document.getElementById("inp1");
// var inp2 = document.getElementById("inp2");
// var inp3 = document.getElementById("inp3");
// var inp4 = document.getElementById("inp4");
// var inp5 = document.getElementById("inp5");
// var inp6 = document.getElementById("inp6");
var password = document.getElementById("password"); // inp1.onblur = function () {
// var span = this.nextElementSibling || this.nextSibling;
// if(/^[1-9][0-9]{4,}$/.test(this.value)){
// span.innerHTML = "恭喜您,输入正确!";
// span.className = "right";
// }else{
// span.innerHTML = "格式错误!";
// span.className = "wrong";
// }
// } //qq号
addEvent("inp1", function () {
if(/^[1-9][0-9]{4,}$/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
}else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
});
//手机号
addEvent("inp2", function () {
if(/^((13[0-9])|(15[^4,\D])|(18[0-9]))\d{8}$/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
}else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
}); //邮箱
addEvent("inp3", function () {
if(/^[\w\-\.]{5,}\@[\w]+\.[\w]{2,4}$/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
}else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
}); //座机
addEvent("inp4", function () {
if(/(^0\d{2}-8\d{7}$)|(^0\d{3}-3\d{6}$)/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
}else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
}); //用户名
addEvent("inp5", function () {
if(/^[a-zA-Z0-9_-]{3,16}$/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
}else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
}); //密码
addEvent("inp6", function () {
if(/^[a-zA-Z0-9_\-$]{6,18}$/.test(this.value)){
setClassName(this,"right");
setInnerHTML(this,"恭喜您,输入正确!");
password.className = "pwd str1";
//只有密码通过了,才能执行密码强度测试
//从大往小判断。
if(/^[A-Za-z0-9]+[_$][A-Za-z0-9]*$/.test(this.value)){
password.className = "pwd str4";
}else if(/^([a-z].*[0-9])|([A-Z].*[0-9])|[0-9].*[a-zA-Z]$/.test(this.value)){
password.className = "pwd str3";
}else if(/^([a-z].*[A-Z])|([A-Z].*[a-z])$/.test(this.value)){
password.className = "pwd str2";
} }else{
setClassName(this,"wrong");
setInnerHTML(this,"格式错误!");
}
}); //因为每次都要这样调用,所以很繁琐,我们通过封装实现代码
function addEvent(str,fn){
document.getElementById(str).onblur = fn;
} function setClassName(aaa,txt){
var span = aaa.nextElementSibling || this.nextSibling;
span.className = txt;
}
function setInnerHTML(aaa,txt){
// console.log(this);
var span = aaa.nextElementSibling || this.nextSibling;
span.innerHTML = txt;
}
}
</script> <body>
<div class="container">
<label for="inp1">QQ</label><input type="text" id="inp1"><span>输入正确的QQ号码</span><br>
<label for="inp2">手机</label><input type="text" id="inp2"><span>输入13位手机号码</span><br>
<label for="inp3">邮箱</label><input type="text" id="inp3"><span>输入正确邮箱</span><br>
<label for="inp4">座机</label><input type="text" id="inp4"><span>输入您的座机</span><br>
<label for="inp5">账号</label><input type="text" id="inp5"><span>亲输入您的账号</span><br>
<label for="inp6">密码</label><input type="text" id="inp6"><span>请输入您的密码</span><br>
<div id="password" class="pwd"></div>
</div>
</body>
</html>

JS-特效 ~ 05. 缓动框架兼容封装/回掉函数/兼容透明度/层级、旋转轮播图、正则表达式、验证表单注册账号、的更多相关文章

  1. JS正则表达式验证表单

    一.解释一些符号相关的意义     1.  /^$/ 这个是个通用的格式.         ^ 匹配输入字符串的开始位置:$匹配输入字符串的结束位置     2. 里面输入需要实现的功能.       ...

  2. JS特效@缓动框架封装及应用

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.变量CSS样式属性获取/赋值方法 给属性赋值:(既能获取又能赋值) 1)div.style.width 单个赋值:点语法,这个方法比较固定 ...

  3. JS——缓动框架的问题

    1.opacity问题:IE678支持filter: alpha(opacity=50)取值1-100:小数位容易精度丢失,所i有统一json字符串设置为百进制,赋值时除以100 2.zIndex问题 ...

  4. JS封装动画框架,网易轮播图,旋转轮播图

    JS封装动画框架,网易轮播图,旋转轮播图 1. JS封装运动框架 // 多个属性运动框架 添加回调函数 function animate(obj,json,fn) { clearInterval(ob ...

  5. 原生js封装ajax:传json,str,excel文件上传表单提交

    由于项目中需要在提交ajax前设置header信息,jquery的ajax实现不了,我们自己封装几个常用的ajax方法. jQuery的ajax普通封装 var ajaxFn = function(u ...

  6. Thinkphp3.2.3框架下封装公共的函数,例如封装CURL函数来获取接口数据

    当我们需要在控制层调用相同的封装函数时,写多次相同的函数,显得代码十分的拉杂,不精简: TP框架有一个很好的机制,可以再Common定义一个function.php函数,当我们在控制层调用的时候直接调 ...

  7. 原生JS实现旋转轮播图+文字内容切换

    废话不多说,直接上图看效果: 需求:点击左右按钮实现切换用户图片与信息: 原理:点击右侧左侧按钮,把3号的样式给2号,2号的给1号,1号的给5号,5号的给4号,4号的样式给3号,然后根据现在是第几张图 ...

  8. tp框架之自动验证表单

    tp框架的create自动加载表单的方法可以自动根据自己定义的要求来验证表单里面的内容,但是由于是在后台执行代码,会拖慢程序运行速度,所以还是建议通过前端js来进行判断,后台只进行数据库的查询以及传值 ...

  9. js验证表单大全

    js验证表单大全 1. 长度限制 <script> function test() { if(document.a.b.value.length>50) { alert(" ...

随机推荐

  1. C程序设计(第四版)课后习题完整版 谭浩强编著

    //复习过程中,纯手打,持续更新,觉得好就点个赞吧. 第一章:程序设计和C语言 习题 1.什么是程序?什么是程序设计? 答:程序就是一组计算机能识别和执行的指令.程序设计是指从确定任务到得到结果,写出 ...

  2. 前端笔记之微信小程序(二){{}}插值和MVVM模式&数据双向绑定&指令&API

    一.双花括号{{}}插值和MVVM模式 1.1 体会{{}}插值 index.wxml的标签不是html的那些标签,这里的view就是div. {{}}这样的插值写法,叫做mustache语法.mus ...

  3. js 共有和私有

    //共有 var SunHang = function(){ var name = "ssss"; this.name = "hhhhh"; function ...

  4. maven 打包并导出 lib 第三方jar

    一. maven 导出lib 包 执行命令 mvn dependency:copy-dependencies -DoutputDirectory=target/lib 或者在 eclipse 中执行, ...

  5. alluxio源码解析-层次化存储(4)

    层次化存储-特性介绍: https://www.alluxio.org/docs/1.6/cn/Tiered-Storage-on-Alluxio.html 引入分层存储后,Alluxio管理的数据块 ...

  6. eclipse安装STS插件遇到的问题

    eclipse安装STS插件 第一次接触springboot,对于用惯了eclipse写代码的人来说,接受IDEA确实还要多花点时间去改变下,因为IDEA确实会节省下不必要的写代码时间.废话少说,直接 ...

  7. 阿里云短信服务(JAVA)

    一,前言 ​ 短信验证码想必大家都不陌生,在很多网站,APP中都有使用到.比如登录,注册,身份校验等场景.不过通常情况下,短信服务都是外包给第三方公司的,接下来向大家分享如何使用阿里的短信服务. 二, ...

  8. Java Socket:飞鸽传书的网络套接字

    在古代,由于通信不便利,一些聪明的人就利用鸽子会飞且飞得比较快.会辨认方向的优点,对其进行了驯化,用来进行消息的传递——也就是所谓的“飞鸽传书”.而在 Java 中,网络套接字(Socket)扮演了同 ...

  9. serverless在微店node领域的探索应用

    背景 目前微店中台团队为了满足公司大部分产品.运营以及部分后端开发人员的尝鲜和试错的需求,提供了一套基于图形化搭建的服务端接口交付方案,利用该方案及提供的系统可生成一副包含运行时环境定义可立即运行的工 ...

  10. C++中轻量级多线程openmp

    关于其概念及使用方法: https://baike.baidu.com/item/openmp/3735430?fr=aladdin