JS--运动

****JS第二定律:凡是好用的都不兼容。***

一,运动基础 

clearInterval(timer)➡️function()

 

运动框架和应用

  运动开始前关闭之前的定时器;

  运动和停止隔开

 

运动框架实例:(向左向右,透明度)

例子1:分享到侧边栏

例子2:淡入淡出的图片

 

缓冲运动:

例子1:缓冲菜单「距离大速度小,距离小速度大」

  比如:speed=(300-oDiv.offsetLeft)/10

  向上向下取整设置:speed=speed>0?Math.ceil(speed):Math.floor(speed);

 

例子2:缓冲菜单,跟随页面滚动的缓冲侧边栏

   oDiv.style.top=(document.documentElement.clientHeight-oDiv.offsetHeight)/2+scrollTop+'px');

注意点:速度取整

 

二,JS运动应用

▲多物体同时运动

单个定时器存在问题,开多个定时器(每个Div一个定时器)

▲多物体运动框架

所有东西都不能公用(分对象设定)

 

去掉offset,改成getStyle(),用currentStyle代替offset

 

▲任意值运动框架

四舍五入:Math.round()

 

▲仿flash展示

 

**************************

JS--运动中级

一,链式运动框架

startMove(obj, attr,iTarget, fn)

例子:

oDiv.onmouseover=function()
{
    startMove(oDiv, 'width', 300, function(){
        startMove(oDiv, 'height', 300, function(){
            startMove(oDiv, 'opacity', 100);
        });
    });
};

 

二,完美运动框架

startMove(obj, json, fn)

网盘有具体资料

 

三,总结与应用

运动框架的应用:幻灯片

链式运动:新浪微博

 

JS--事件基础

一,event对象和事件冒泡

获取事件的具体信息

document的本质:document.childNodes[0].tagNmame()

 

获取鼠标的x,y坐标:

var oEvent.ev || event;

alert(oEvent.clientX + ',' + oEvent.clientY);

 

事件流:

取消冒泡:oEvent.cancelBubble=true;

 

二,鼠标事件

**鼠标位置**

可视区:clientX,clientY

注意:scrollTop

 

三,键盘事件

keyCode:按键对应的阿斯克码

onkeydown:键盘按下发生的事件

ctrl+回车提交留言:oEvent.onkeydown==13 && oEvent.ctrlKey

 

其他属性:shiftKey,altKey等

 

**************

*JS事件中级*

1,默认行为

阻止默认事件

document.oncontextmenu=function()
{
    return false; //阻止默认事件
}

 

例子1:屏蔽右键菜单

例子2:只能输入数字

 

2,拖拽

简易拖拽

靠谱拖拽:做判断。左边,上边等于零;右边下边等于可视区减去div长度宽度

 

*****************

**JS事件高级应用**

事件绑定:

代码例子:

IE下:
oBtn.attachEvent('onclick', function() { alert('a'); });

或者(解决兼容性问题)火狐,chrome下:
addEventListener('click', function()
{
    alert('a');
});

解除绑定detachEvent(事件名称,函数)

 

   IE方式

   DOM方式

 

高级拖拽:限制范围(不拖出窗口,不拖出指定对象的div),磁性吸附(等于某个值,比如:l=50)

   事件捕获(解决IE6,7的兼容性问题):IE专用

       捕获:oDiv.setCapture()

       释放捕获:oDiv.releaseCapture()

 

自定义滚动条:拖拽,控制其他对象

 

******************

**AJAX基础****

1,什么是服务器

 

2,什么是Ajax

无刷新读取数据

 

3,使用Ajax

字符集编码

缓存

阻止缓存:ajax('aaa.txt?t='+new Date().getTime())

eval(str):把字符串读成数组

 

4,Ajax原理

HTP请求方法:

    GET:把值放入(提交到)URL中一起传递;

             但是网址长度有限,容量小,不适合传递大数据;

              安全性差

              有缓存 

              更适合获取数据(比如浏览帖子)

    POST:不通过网址传递(通过http context)传递数据

             容量大(上线可达2G左右)

             安全性好一点

             更适合上传数据(比如用户注册)

 

*****************

**AJAX中级***

1,编写Ajax

 创建Ajax对象(方法如下):

     只在IE下可用:ActiveXObject(“Microsoft.XMLHTTP”)

    IE以外的:XMLHttpRequest()

四个步骤:创建Ajax对象;连接到服务器;告诉服务器,要哪个文件;接受返回值

注意:JS中,用没有定义的变量则报错;用没有定义的属性则返回undefined

比如:window.XMLHttpRequest()

 

 连接服务器:

  open(方法,文件名,异步传输)

            同步:事件一件一件来

            异步:多个时间一起做

比如:oAjax.open('GET', 'filename', true)

 

 发送请求:

  比如:oAjax.send()

 

接受返回:

 比如:

oAjax.onreadystatechange=function()
{
    if(oAjax.readyState==4) //4代表读取完成
    {
         if(oAjax.status==200){alert('成功');}
else{alert('失败');} } }

 

JS面向对象基础

 

1,什么是面向对象:

     不了解原理的情况下会使用功能

 

例子:电视,按钮的关系

 

对象:黑盒子,不了解内部的结构,知道表面的各种操作

 

2,JS中的面向对象

面向对象编程(OOP)

  抽象:“抽”—>把最主要的特点,跟问题相关的

特征抽出

  封装:看不到里面的东西,用好表面的功能就行了

  继承(遗传):从父类上继承出一些方法属性,子类又有一些自己的特征

      多重继承:继承多个父级的特征

      多态:

 

对象的组成:方法(函数),属性(变量)

 

**this:当前的方法属于谁,则this就是谁**

 

构造函数:用来构造对象

工厂方式:原料,加工,出厂(问题点:没有new;函数重复,导致资源浪费)

 

******************************************

JS的原型是?

 

CSS中                                               JS中

class:一次给一组元素加样式             原型

行间样式:一次给一个元素加样式         给对象加事件

 

******************************************

 例子:Array.prototype.sum=function()

所有数组都加上sum方法

 

类:模子—>蛋糕模子

对象:产品(成品)—>蛋糕

 

3,原型的使用

用构造方法加属性,用原型加方法

 

 

***************

**JS高级应用**

实例:面向对象的选项卡

1,把面向过程的程序,改写成面向对象的形式

     原则:不能有函数套函数,但可以有全局变量

     过程:onload(构造方法);全局变量(属性);函数(方法)

     改错:this,事件,闭包,传参

 

2,对象和闭包

    通过闭包传递this

 

3,Json方式的面向对象

把方法包在一个Json里面(适用整个程序只有一个,写起来简单)

 

命名空间:把相同命名的方法,分别写在不同的Json中

 

4,继承

比如:

属性的继承:

function B()

{ 

    A.call(this);

}

 

原型的继承:

for(var i in A.prototype)

{

    B.prototype[i]=A.prototype[i];

}

 

5,使用继承

 

6,系统对象

宿主对象(有浏览器提供的对象):DOM,BOM

内置对象(静态对象):Math

本地对象(非静态对象):需要实例化的对象,比如object

 

 

*****************

**BOM应用**

1,BOM基础

打开关闭窗口

document.write():先清空在写

window.open('about:blank', '_blank')

window.close()

 

userAgent:当前浏览器的版本信息

location:返回当前的网址,或者赋值(网址)

 

2,尺寸

clientWidth:可视区大小

scrollTop:滚动距离

document.body.scrollTop()

 

div 窗口的位置:clientHeight-offsetHeight+scrollTop

 

3,常用方法和事件

警告框:alert()

选择框:confirm()

输入框:prompt()

 

window对象常用事件:onload,onsroll,onsize

***************************

***COOKIE基础与应用***

1,什么事cookie

页面用来保存信息的:用户名等

特性:容量小,同一个网站只有一套,数量有限,有过期时间

 

2,cookie的使用

JS中的:document.cookie

例子:提交时记录用户名等,浏览记录等 

 

****************************

**正则表达式**********重点****

search:查找字符串

substring:获取子字符串

charAt:获取某个字符

split:切分字符串,获得数组

 

1,什么是正则表达式:

正则:规则,模式

强大的字符串表达式,是一种正常人很难读懂的文字

正则写法:JS风格;perl风格

               JS方法:new RegExp(‘a’, ‘i’) // i 表示忽略大小写

               perl方法:/a/i

正则转义(比如\d 表示数字)

g:找到全部(globle)

match(/\d/)

 

量词:个数

+:表示若干

match(/\d+/g)

 

replace:替换

例子:敏感词过滤

re=/北京|淘宝|百度/g;

replace(re,‘*****’); //用****替换北京,淘宝,百度

 

元字符(方括号):[]

点. --> 代表任意字符

    例子1:[abc] 表示任意字符

    例子2:[^a-z] 表示除了字母

    例子3:过滤html标签

//表示除了<>以外,<>中的内容用空白代替
re=/< [^<>]+>/g;
replace(re,‘’);

 

常用的转义字符

\d:代表数字 [0-9]

\w:英文,数字,下划线 [a-z0-9_]

\s:空白字符(空格等)

 

\D:[^0-9]

\W:[^a-z0-9_]

\S:非空白字符

 

量词:

 :正好出现n次 

{n,m} :最少n次,最多m次数

{n,} :最少n次,最多无限次数

?:表示前面的可以有,也可以没有

+:表示若干,最少1次

*:可以没有,也可以有,且不限次数(0~无限次)

 

常用正则例子:邮箱校验

//一串英文,数字,下划线 @ 一串英文,数字 . 一串英文
//^:字符串行首 $:字符串行尾
var re=/^\W+@[a-z0-9]+\.+[a-z]+$/i;
if(re.test(oTxt.value))
{
alert('true 合法邮箱');
}
else
{
alert('邮箱写错了');
}

 

posted @ 2020-06-09 21:34  SmallCap  阅读(187)  评论(0)    收藏  举报