JS原生第六篇 (帅哥)


复习

  1. 按钮不可用    disabled =  “disabled”  ||  true
  2. setTimeout   只执行一次    setInterval  执行很多次
  3. 递归调用 :  函数自己调用自己  函数递归调用    不提倡用函数名 而喜欢用的是  arguments.callee    返回的是  正在执行的函数 本身
  4. 逻辑运算符   与  &&  或  ||   非  !         ! > && > ||
  5. 2&&0    0   1&&8         0&&3   0      1||0
  6. 转换为 字符型      
        var num = 12345;
        num+ “”
        String(num);  
        num.toString();   10进制
        num.toString(2)   二进制
  7. 根据字符位置返回字符    
        charAt(索引号)

var txt = “abcde”;

txt.charAt(3);  d

charCodeAt(3)   unicode  编码       97      100

1.1  根据字符返回位置

跟  charAt()   相反的   根据  字符 返回的是 位置

1.1.1 返回前面起第一个字符的位置

indexOf(“字符”);

它是从 前面开始数(从左边开始数), 而且只找第一个, 然后返回改字符的位置, 索引号都是从0开始的。  返回的是个数值。

var txt = “abcdef”;

alert(txt.indexOf(“d”))      结果就是   3

如果找不到该字符   返回  -1

1.1.2 返回后面起第一个字符的位置

lastIndexOf(参数:索引字符串)

从后面开始数    同上

var  txt = “abcdef” ;

txt.lastIndexOf(“d”);     3

返回的值,还是从 左边开始 数的 索引号 。

1.2 网址编码 

我们知道一个网址 自己的网址,   不同页面也有自己id网址, 我们经常会做一些, 把网址送入到后台。  但是后台再处理的 不认识比如 换行啊 等特殊符号的  ?

var url =  “http://www.itast.cn?name=cz”

所以我们要实现编码,然后再传到后台。

encodeURIComponent() 函数可把字符串作为 URI 组件进行编码

decodeURIComponent() 函数可把字符串作为 URI 组件进行解码

var url = "http://www.itcast.cn?name=andy";
console.log(encodeURIComponent(url));  // 编码
var afterUrl = encodeURIComponent(url);
console.log(decodeURIComponent(afterUrl));  // 解码

结果:

1.3 操作字符串

合并字符串   取字符串

1.3.1  concat() 连接字符串

var  txt1 = “abc”;

var txt2 = ”123”;

console.log(txt1.concat(txt2));     “abc123”;

1.3.2 slice()  

slice(“取字符串的起始位置”, [结束位置]) ;    []  可选的

起始位置一定要有  结束位置可以省略

var txt = “abcedf”;

txt.slice(3) ;    从 txt 里面字符的 第 3(索引号)个开始取   结束位置省略, 一直取到最后一个。

总结  slice(3)  从第3个开始取,一直取到最后

slice(3,6)     3 从 第3个开始 取     6  取到第6索引号的位置,还是从左边的第0个开始数。 但是不包 6 。

起始位置可以是负数  , 如果是负数,则是从 右边往左边开始取。

var txt =”asdf”;

txt.slice(-1)  结果是   f

1.3.3  substr()

substr(起始位置,[取的个数])

同上。

不写取的个数, 默认从起始位置一直取到最后 。

取的个数:    是指从起始位置开始,往后面数几个。

var txt = “abcdefghijk”;

txt.substr(3,4);

从第3个  (d) 开始 数 4个  defg

substr(-1)  少用   ie678 报错 。 尽量少用

兼容性的写法 :

onBtnClick("btn7",div1.substr(div1.length-1,1));  // 兼容的写法

substring 同slice  一样的   但是有一点不同

substring(3,6)

substring 始终会把  小的值作为  起始位置 大的值作为结束位置

例如:  substring(6,3)   实际中   自动变成  substring(3,6);

1.4 保留小数位数

122340.12345      保留两位有效小数  122340.12

substr(0, .+3)

1.console.log(str.substr(0,str.indexOf(".")+3));

通过 indexOf  返回小数点的位置     截取字符串

2 console.log(parseInt(PI*100) /100);

先乘以100  取整  然后 除以100

3 console.log(PI.toFixed(2));

pi.toFixed(2)  保留 2位 小数

1.5 大小写转换

asdf   =  ASDF

ASDF  --   asdf

1 toUpperCase,转换为大写(参数: 无)

2 toLowerCase,转换为小写(参数:无)

asdf.toUpperCase()   结果就是:     ASDF

$("txt").value.toUpperCase();

把txt 的值 转换为大写

1.6 无缝滚动

原理:

首先先复制  两张图片 (第一张和第二张) 放到最后面  (本质上是第 5.6张)

ul 是盒子移动的,   如果ul 的left 值  大于等于  4张图片的宽度,就应该快速复原为0 。

完整代码:

1  <script>

2     var scroll = document.getElementById("scroll");

3     var ul = scroll.children[0];

4     var num = 0; //控制左侧值  left

5     var timer = null;  // 定时器

6     timer = setInterval(autoPlay,20);

7     function autoPlay() {

8         num--;

9         //console.log(num);

10         num<=-1200 ? num = 0 : num;

11         ul.style.left = num + "px";

12     }

13     scroll.onmouseover = function() {  // 鼠标经过大盒子  停止定时器

14         clearInterval(timer);

15     }

16     scroll.onmouseout = function() {

17         timer = setInterval(autoPlay,20);  // 开启定时器

18     }

19 </script>

1.7 缓动动画

匀速动画,看起来,效果太简单。

等差序列   :    2  4  6  8  10

缓动动画公式:

一个盒子初始值  是  0      要走到 400 px 的位置

假如说,初始值   leader  0          target  400

box.style.left =  xxxx +   “px”

leader = leader + (target - leader ) /10 ;

1    btn.onclick = function() {

20         setInterval(function(){

21             leader = leader + (target - leader )/10;

22             box.style.left = leader + "px";

23         },30)

24     }

1.8  

1.     根据位置返回 字符   asdfg.charAt(3)       f

根据字符返回位置    asdfgg.indexOf(“f”)   3   从前面索引

lastIndexOf(“g”)  5   从后面索引

2.   slice(起始位置,[ 结束位置 ])

slice(3)  从第3个开始选     slice(3,6)   从索引号3开始取,数6个  但是从索引号0  开始数

var arr = [1,3,5,7];

asdfghidk     fgh

substr(3,6)  从3开始选  从第三个开始数 往后 数 6个     fghidk

toFixed(2)

缓动公式 :

leader =  leader + (target - leader) / 10

1.9 offset家族

offset  自己的

目的:  js中有一套方便的获取元素尺寸的办法就是offset家族;

1.9.1 offsetWidth    offsetHeight

得到对象的宽度和高度(自己的,与他人无关)

offsetWidth =  width  + border  +  padding

div {  width:220px;  border-left:2px solid red; padding:10px;}

div.offsetWidth =  220 + 2 + 20

为什么不用 div.style.width   因为东西 只能得到行内的数值

1.9.2 offsetLeft  offsetTop    

返回距离上级盒子(最近的带有定位)左边的位置

如果父级都没有定位则以body 为准

这里的父级指的是所有上一级 不仅仅指的是 父亲 还可以是 爷爷 曾爷爷 曾曾爷爷。。。。

offsetLeft 从父级的padding 开始算    父亲的border 不算

总结一下:  就是子盒子到定位的父盒子边框到边框的距离

1.9.3 offsetParent  

返回改对象的父级 (带有定位) 不一定是亲的爸爸

前面学过一个返回父亲(亲的)    parentNode   有所区别

如果当前元素的父级元素没有进行CSS定位(position为absolute或relative),offsetParent为body。

2、如果当前元素的父级元素中有CSS定位(position为absolute或relative),offsetParent取最近的那个父级元素。

var son = document.getElementById("son");
//alert(son.parentNode.id);
alert(son.offsetParent.tagName);  // tagName标签的名字

1.9.4 offsetTop style.top 的区别

一、最大区别在于  offsetLeft  可以返回没有定位盒子的距离左侧的位置。 而 style.top 不可以  只有定位的盒子 才有 left  top right

二、offsetTop 返回的是数字,而 style.top 返回的是字符串,除了数字外还带有单位:px。

style.left = 300px      parseInt(300px)    结果  300

parseInt(style.left) + parseInt(style.left)

三、offsetTop 只读,而 style.top 可读写。

四、如果没有给 HTML 元素指定过 top 样式,则 style.top 返回的是空字符串。

五、最重要的区别  style.left 只能得到 行内样式     offsetLeft 随便

1.10 事件对象

我们学过一些事件 :   onmouseover   onmouseout    onclick .....

btn.onclick = function(event) {  语句 }

event   单词翻译过来   事件 的意思

event  就是事件的对象    指向的是 事件  是   onclick

再触发DOM上的某个事件时,会产生一个事件对象event,这个对象中包含着所有与事件有关的信息。所有浏览器都支持event对象,但支持的方式不同。

比如鼠标操作时候,会添加鼠标位置的相关信息到事件对象中。

普通浏览器支持 event

ie 678 支持 window.event

所以我们 采取兼容性的写法 :

var event = event || window.event;

1.10.1 event 常见属性


属性


作用


data


返回拖拽对象的URL字符串(dragDrop)


width


该窗口或框架的高度


height


该窗口或框架的高度


pageX


光标相对于该网页的水平位置(ie无)


pageY


光标相对于该网页的垂直位置(ie无)


screenX


光标相对于该屏幕的水平位置


screenY


光标相对于该屏幕的垂直位置


target


该事件被传送到的对象


type


事件的类型


clientX


光标相对于该网页的水平位置 (当前可见区域)


clientY


光标相对于该网页的水平位置

1.10.2 pageX  clientX  screenX 区别

screen X   screenY

是以我们的电脑屏幕 为基准点   测量

pageX  pageY

以我们的  文档   (绝对定位)  的基准点 对齐

ie678 不认识

clientX   clientY

以 可视区域 为基准点   类似于    固定定位

1.11 常用事件

onmouseover      onmouseout   onclick

onmousemove    当鼠标移动的时候    就是说,鼠标移动一像素就会执行的事件

div.onmousemove = function() { 语句 }

当鼠标再div 身上移动的时候,就会执行。

得到在某个盒子内的坐标:

div.onmouseover      和    div.onmousemove   区别

他们相同点   都是 经过  div 才会触发

div.onmouseover    只触发一次

div.onmousemove   每移动一像素,就会触发一次

onmouseup       当鼠标弹起

onmousedown     当鼠标按下的时候

1.拖动 原理 ==   鼠标按下  接着 移动鼠标 。

bar.onmousedown = function(){

document.onmousemove = function(){

}

}

  1. 当我们按下鼠标的时候,就要记录当前 鼠标 的位置 - 大盒子的位置
     算出  bar  当前 在  大盒子内的距离 。

1.11.1 防止选择拖动

我们知道 按下鼠标然后拖拽可以选择文字 的。

清除选中的内容

window.getSelection ? window.getSelection().removeAllRanges() : document.selection.empty();

时间: 2024-12-24 13:45:50

JS原生第六篇 (帅哥)的相关文章

JS原生第一天 (帅哥)

"流程控制语句":if.for. 1.1 if 选择语句,给程序添加了多种执行路线. 1 if(){ 2  语句1 3 }else if(){ 4  语句2 5 }else if(){ 6  语句3 7 }else{ 8  语句4 9 } 有且仅有一条出路.注意跳楼现象. 所以我们发现,计算机的两个基本能力:1)计算能力 2)流程控制能力 1.2 for 循环语句,顾名思义,就是将结构类似的语句重复执行. 1 for(var i = 0 ; i <= 100 ; i++){ 2 

JS原生第七篇 (帅哥)

1.1 复习 offset   自己的 偏移 offsetWidth    得到自己的宽度 offsetHeight 构成 :   width  +   padding  +  border div    width 200   border 3px    padding-right: 15px div  offsetWidth =    200 +  6  +  15  =  221 2.  offsetLeft      offsetTop div.offsetLeft 得到距离 这个 di

JS原生面向对象终结篇 (帅哥)

闭包 基础    面向对象基础 1.1 闭包 在程序语言中,所谓闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落.这些外部执行域的非持久型变量神奇地保留他们在闭包最初定义(或创建)时的值. 白话:  我们可以用一个函数 去访问 另外一个函数的内部变量的方式就是闭包. 内部变量 是 局部变量      那我们知道,局部变量是不可以为别人随便使用也. function fun() {    var num = 10;}console

JS原生系列-DOM篇(延伸)

关于DOM,这就是最后一部分了,这部分都是后台或者最新的dom api,学的时候需要多的记忆一次,有印象有保障! -.ajax的介绍:ajax输出json格式文件 jsonp的介绍 xhr2的介绍 http://www.w3school.com.cn/ajax/ajax_xmlhttprequest_create.asp -.cookie的介绍:设置cookie和删除cookie -.html5 存储的介绍:web客户端存储(localStorage sessionsStorage) 缓存( c

JS原生系列-BOM篇

我们已经学习了DOM,文档对象模型,我们的主要处理都是在这个模型基础上工作的,同样我们还有可能对浏览器进行一些操作,如: 1.检测浏览器的类型和版本 2.检测是pc还是移动设备 3.根据条件,进行页面的自动跳转 4.打开一个新的窗口,存放指定链接 5.关闭窗口 6.返回到上一个页面 7.获取地址栏信息,进行处理 等... 我们来学习,并且逐个实现上面的处理 (一)screen对象,Screen 对象中存放着有关显示浏览器屏幕的信息. 代表屏幕对象,获取屏幕信息,并不是浏览器 availHeigh

JS数据结构第六篇 --- 二叉树力扣练习题

1.第226题:翻转二叉树 递归+迭代两种实现方式: /** 反转二叉树 * Definition for a binary tree node. * function TreeNode(val) { * this.val = val; * this.left = this.right = null; * } */ /** * @param {TreeNode} root * @return {TreeNode} * 第一种方式迭代 * 执行用时 :72 ms, 在所有 JavaScript 提

Python开发【第十六篇】:AJAX全套

Python开发[第十六篇]:AJAX全套 概述 对于WEB应用程序:用户浏览器发送请求,服务器接收并处理请求,然后返回结果,往往返回就是字符串(HTML),浏览器将字符串(HTML)渲染并显示浏览器上. 1.传统的Web应用 一个简单操作需要重新加载全局数据 2.AJAX AJAX,Asynchronous JavaScript and XML (异步的JavaScript和XML),一种创建交互式网页应用的网页开发技术方案. 异步的JavaScript:使用 [JavaScript语言] 以

认识JQuery,JQuery的优势、语法、多库冲突、JS原生对象和JQuery对象之间相互转换和DOM操作,常用的方法

(一)认识JQuery  JQuery是一个JavaScript库,它通过封装原生的JavaScript函数得到一套定义好的方法    JQuery的主旨:以更少的代码,实现更多的功能 (二)JQuery的优势 1)可以像CSS一样访问和操作DOM 2)修改CSS控制页面外观 3)简化JS代码操作 4)事件代理更加容易 5)动画效果使用方便 6) Ajax技术更加完美 7)大量的基于Jquery的插件 8)可以自定义扩展功能插件 (三)JQuery的语法 格式:$(selector).actio

Python之路【第六篇】:socket

Python之路[第六篇]:socket Socket socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求. socket起源于Unix,而Unix/Linux基本哲学之一就是"一切皆文件",对于文件用[打开][读写][关闭]模式来操作.socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO.打开.关闭