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

得到距离 这个 div 最近的 带有定位的 父 盒子   左边距离

3. offsetParent      返回自己的父亲元素   (带有定位的)

parentNode    这个返回亲父亲 不管父亲是否带有定位

4.  style.top   offsetTop

offsetTop   只读    只可以得到结果 但是不能赋值

style.top    能得到 (行内式 )    但是可以给值

style.top   得到的是  25px

offsetTop   得到的是 25

5. 事件对象   event

div.onclick =  function(event) {  }   event 是点击的事件对象

event 集合点击事件的相关信息

pageX    文档的   参考点

clientX    可视区域

ScreenX   屏幕

  1. 常用事件

onmouseover     经过

onmouseout      离开

onmousemove     鼠标移动

var num = 0;

div.onmouseover = function() { num++;  console.log(num))}  1

div.onmousemove = function() { num++;  console.log(num))}

onmousedown   按下鼠标

onmouseup      弹起鼠标

拖拽:  先按下鼠标 然后  移动鼠标

bar.onmousedown = funtion() {

document.onmousemove = function() {}

}

最大 window  对象          document对象

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

1.2 模拟垂直滚动条

红色盒子高度计算公式: 容器的高度 / 内容的高度 * 容器的高度

红色方块移动一像素 ,我们的内容盒子移动多少呢?

(内容盒子高度 -  大盒子高度) /  (大盒子高度 - 红色盒子的高度)    计算倍数

(内容盒子高度 -  大盒子高度) /  (大盒子高度 - 红色盒子的高度)   * 红色盒子移动的数值

1.3   Html基本结构访问方法

文档是 document

html   body   head

document.head

document.body

document.title

没有 document.html  取而代之的是  document.documentElement;

1.4   scroll家族  

Offset  自己的   偏移

scroll   滚动的

1.4.1  scrollTop    scrollLeft     

scrollTop     被卷去的头部

它就是当你滑动滚轮浏览网页的时候网页隐藏在屏幕上方的距离

1.4.2 怎么得到scrollTop

我们学习一个事件 :  页面滚动效果

window.onscroll = function() { 页面滚动语句  }

谷歌浏览器 和没有声明 DTD  <DOCTYPE > :

document.body.scrollTop;

火狐 和其他浏览器

document.documentElement.scrollTop;

ie9+  和 最新浏览器   都认识

window.pageXOffset;     pageYOffset  (scrollTop)

兼容性写法:

1  var scrollTop = window.pageYOffset || document.documentElement.scrollTop

2         || document.body.scrollTop || 0;

1.4.3  JSON

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,我们称之为JavaScript对象表示法。使用JSON进行数据传输的优势之一。JSON实际上就是JavaScript

Json很像我们学过的样式条;

var myjson={k:v,k:v,k:v...}    键值对   key: value   color: red;

Json一般就是被当做一个配置单用;

我们的网站,可以注册会员:

姓名: 李白

年龄:   500

职业:  it

xml

json  对象 结构书写:

var json = { key: value, key1:value }

var json = {name: “李白”,age: 15}

使用:

json名.属性     json.name        李白

var json1 = {name :"刘德华",age: 55};
console.log(json1.name);  // 输出名字  刘德华
console.log(json1.age);  // 输出年龄  55

1.4.4 判断是不是怪异模式的浏览器

document.compatMode == "CSS1Compat"

document.compatMode === "BackCompat"

BackCompat  未声明

CSS1Compat  已经声明

注意大小写

1.5  scrollTo(x,y)  

window.scrollTo(15,15);

方法可把内容滚动到指定的坐标。

格式:

scrollTo(xpos,ypos)

xpos 必需。要在窗口文档显示区左上角显示的文档的 x 坐标。

ypos必需。要在窗口文档显示区左上角显示的文档的 y 坐标

因为我们的网页大部分都没有水平滚动条,所以,这个x 不太常用。

1.6 
复习

  1. window   -   document
  2. document.title     document.head    document.body
  3. document.documentElement      (约等于  document.html )
  4. scrollTop     被卷去的头部     scrollLeft      封装自己的 函数
  5. scrollTo(x,y)  去往页面的  x 和  y 坐标 的位置
  6. window.scrollTo(x,y)
  7. window.onscroll = fucntion() {  fun (); }       fun()    function() {iffss }
  8. JSON      js 对象表示法      数据传输
  9. var json = {}   对象    var arr = [] ;   数组    var  num; 变量
  10. var json = { width: “100px” ,  height: 100 }     声明的方法
  11. json.height       100       使用

1.7 client 家族

client  可视区域

offsetWidth:   width  +  padding  +  border     (披着羊皮的狼)

clientWidth: width  +  padding      不包含border

scrollWidth:   大小是内容的大小

1.7.1 检测屏幕宽度(可视区域)

ie9及其以上的版本

window.innerWidth

标准模式

document.documentElement.clientWidth

怪异模式

document.body.clientWidth

自己封装一个 返回可视区宽度和高度的函数。

1.7.2  window.onresize    改变窗口事件  

昨天  window.onscroll  = function() {}  屏幕滚动事件

今天  window.onresize = function() {}  窗口改变事件

onresize 事件会在窗口或框架被调整大小时发生

要求:

当我们的页面宽度大于 960 像素的时候   页面颜色是红色

当我们的页面宽度 大于 640 小于 960    页面的颜色是 绿色

剩下的颜色是  蓝色

function fun() {  语句  }

fun   是函数体的意思

fun()  调用函数 的意思

function fun() {
    return 3;
}
console.log(fun);  // 返回函数体 function fun() { retrun 3}
console.log(fun()); // 调用函数  3  返回的是结果
fun();
window.onresize = 3
window.onresize = function fun() { retrun 3}

1.8 检测屏幕宽度(分辨率)

clientWidth   返回的是 可视区 大小    浏览器内部的大小

window.screen.width   返回的是我们电脑的 分辨率   跟浏览器没有关系

1.9 简单冒泡机制

事件冒泡: 当一个元素上的事件被触发的时候,比如说鼠标点击了一个按钮,同样的事件将会在那个元素的所有祖先元素中被触发。这一过程被称为事件冒泡;这个事件从原始元素开始一直冒泡到DOM树的最上层。

顺序

E 6.0:

div -> body -> html -> document

其他浏览器:

div -> body -> html -> document -> window

不是所有的事件都能冒泡。以下事件不冒泡:blur、focus、load、unload

1.9.1 阻止冒泡的方法

标准浏览器 和  ie浏览器

w3c的方法是event.stopPropagation()        proPagation  传播  传递

IE则是使用event.cancelBubble = true       bubble   冒泡  泡泡       cancel 取消

兼容的写法:

3  if(event && event.stopPropagation)

4         {

5             event.stopPropagation();  //  w3c 标准

6         }

7         else

8         {

9             event.cancelBubble = true;  // ie 678  ie浏览器

10  }

1.9.2  小案例 点击空白处隐藏盒子

这个案例就是说,一个盒子,点击除了自己之外的任何一个地方,就会隐藏。

原理:

点击自己不算 ( 怎么证明我是我 点击的这个对象id 正好和自己一样  )

点击空白处 就是点击  document

1.9.3 判断当前对象

火狐 谷歌 等   event.target.id

ie 678          event.srcElement.id

兼容性写法:

var targetId = event.target ? event.target.id : event.srcElement.id;

targetId != "show"

代码:

1 <!DOCTYPE html>

11 <html>

12 <head lang="en">

13     <meta charset="UTF-8">

14     <title></title>

15     <style>

16         body {

17             height:2000px;

18         }

19         #mask {

20             width: 100%;

21             height: 100%;

22             opacity: 0.4;   /*半透明*/

23             filter: alpha(opacity = 40);  /*ie 6半透明*/

24

25             position: fixed;

26             top: 0;

27             left: 0;

28             display: none;

29         }

30         #show {

31             width: 300px;

32             height: 300px;

33             background-color: #fff;

34             position: fixed;

35             left: 50%;

36             top: 50%;

37             margin: -150px 0 0 -150px;

38             display: none;

39         }

40     </style>

41 </head>

42 <body>

43 <a href="javascript:;" id="login">注册</a>

44 <a href="javascript:;">登录</a>

45 <div id="mask"></div>

46 <div id="show"></div>

47 </body>

48 </html>

49 <script>

50     function $(id) { return document.getElementById(id);}

51     var login = document.getElementById("login");

52     login.onclick = function(event) {

53         $("mask").style.display = "block";

54         $("show").style.display = "block";

55         document.body.style.overflow = "hidden";  // 不显示滚动条

56         //取消冒泡

57         var event = event || window.event;

58         if(event && event.stopPropagation)

59         {

60             event.stopPropagation();

61         }

62         else

63         {

64             event.cancelBubble = true;

65         }

66     }

67     document.onclick = function(event) {

68

69         var event = event || window.event;

70         // alert(event.target.id);  // 返回的是点击的某个对象的id 名字

71         // alert(event.srcElement.id);

72         var targetId = event.target ? event.target.id : event.srcElement.id;

73         // 看明白这个写法

74         if(targetId != "show")  // 不等于当前点点击的名字

75         {

76             $("mask").style.display = "none";

77             $("show").style.display = "none";

78             document.body.style.overflow = "visible"; // 显示滚动条

79         }

80     }

81 </script>

1.9.4  选中之后,弹出层

我们想,选中某些文字之后,会弹出一个弹出框

这个和 我们前面讲过的拖拽有点不一样。

拖拽  是拖着走。  拉着鼠标走 。

选择文字:  这个弹出的层 选中的时候不出来,弹起鼠标的时候才出现 。

所以这个的事件一定是  onmouseup  . 盒子显示而且盒子的位置 再  鼠标的 clientX  和 clientY 一模一样

用来判断选择的文字:

1.9.5 获得用户选择内容

window.getSelection()     标准浏览器

document.selection.createRange().text;      ie 获得选择的文字

兼容性的写法:

if(window.getSelection)
{
    txt = window.getSelection().toString();   // 转换为字符串
}
else
{
    txt = document.selection.createRange().text;   // ie 的写法
}

综合代码:

1 <!DOCTYPE html>

82 <html>

83 <head lang="en">

84     <meta charset="UTF-8">

85     <title></title>

86     <style>

87         div {

88             width: 400px;

89             margin:50px;

90         }

91         #demo {

92             width: 100px;

93             height: 100px;

94

95             position: absolute;

96             top: 0;

97             left: 0;

98             display: none;

99         }

100     </style>

101 </head>

102 <body>

103 <span id="demo"></span>

104 <div id="test">我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字我要复制的文字</div>

105 <div id="another">

106     我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字 我不要的文字

107 </div>

108 </body>

109 </html>

110 <script>

111     function $(id) {return document.getElementById(id)}

112     $("test").onmouseup = function(event) {

113         var event = event || window.event;

114         var x = event.clientX;  //  鼠标的x坐标

115         var y = event.clientY;  //  同理

116         var txt;  // 用于存贮文字的变量

117         if(window.getSelection)  // 获取我们选中的文字

118         {

119             txt = window.getSelection().toString();   // 转换为字符串

120         }

121         else

122         {

123             txt = document.selection.createRange().text;   // ie 的写法

124         }

125         if(txt)   // 所有的字符串都为真  "" 是假    所有的数字为真  0  为假

126         {

127             //看看有没有选中的文字,没有选中文字为空的,就不应该执行   点击一下鼠标 就是空的

128             showBox(x,y,txt);  // 调用函数

129         }

130     }

131     document.onclick = function(event) {  // 点击空白处隐藏

132         var event = event || window.event;

133         var targetId = event.target ? event.target.id : event.srcElement.id;

134         if(targetId != "demo"){

135             $("demo").style.display = "none";

136         }

137     }

138     function showBox(mousex,mousey,contentText) {  // 相关操作

139            setTimeout(function(){

140                $("demo").style.display = "block";

141                $("demo").style.left = mousex + "px";

142                $("demo").style.top = mousey + "px";

143                $("demo").innerHTML = contentText;

144            },300);

145     }

146 </script>

1.10 动画原理

人走路的时候,   步长

动画的基本原理 : 让盒子的 offsetLeft   +  步长

盒子 原来的位置  0    + 10       盒子现在的offsetLeft  10

10 + 10  =  20   + 10

原理:

<script>
    //动画的基本原理   盒子的 offsetLeft  +  步长
    var btn = document.getElementsByTagName("button")[0];
    var div = document.getElementsByTagName("div")[0];
    var timer = null;
    btn.onclick = function() {
       timer = setInterval(function() {
           if(div.offsetLeft > 400)
           {
               clearInterval(timer);
           }
           div.style.left = div.offsetLeft + 10  + "px";
       },20);
    }
</script>

|-5|   = 5

Math.abs(-5)   取绝对值函数       js  就是 数学计算

1.10.1 匀速运动封装函数

1  function animate(obj,target){

147         var speed = obj.offsetLeft < target ? 5 : -5;  // 用来判断 应该 +  还是 -

148         obj.timer = setInterval(function() {

149             var result = target - obj.offsetLeft; // 因为他们的差值不会超过5

150             obj.style.left = obj.offsetLeft + speed + "px";

151             if(Math.abs(result)<=5)  // 如果差值不小于 5 说明到位置了

152             {

153                 clearInterval(obj.timer);

154                 obj.style.left = target + "px";  // 有5像素差距  我们直接跳转目标位置

155             }

156         },30)

157     }

JS原生第七篇 (帅哥)的更多相关文章

  1. JS原生第三篇 (帅哥)

    1.1 数 组 1. 数组           看电影    电影院  座位 大的变量     里面可以放很多的值 var  arr = [1,3,57]; var ar = new Array(); ...

  2. JS原生第八篇 (帅哥)

    1.1 复习     1. clientX          clientWidth   可视区域的宽度 clientWidth     width  +  padding offsetWidth   ...

  3. JS原生第六篇 (帅哥)

    复习 按钮不可用    disabled =  "disabled"  ||  true setTimeout   只执行一次    setInterval  执行很多次 递归调用 ...

  4. JS原生第五篇 (帅哥)

    1.1 节点 1. 节点        网页是有很多的节点组成的  . 元素节点   指的是 :  标签     li  span 文本节点      属性节点 父子兄弟    父    parent ...

  5. JS原生第四篇 (帅哥)

      1.1  1. 循环 for(初始化; 退出条件; 增量)  {  } while(退出条件) {     } do {  语句 }  while(退出条件) 2. switch( )   多选1 ...

  6. JS原生基础终结篇 (帅哥)

    闭包 基础    面向对象基础 1.1 闭包 在程序语言中,所谓闭包,是指语法域位于某个特定的区域,具有持续参照(读写)位于该区域内自身范围之外的执行域上的非持久型变量值能力的段落.这些外部执行域的非 ...

  7. 《唐三学node.js系列》—魂士篇&&三哥初始node.js

    前言 如果你有一定的前端基础,比如 HTML.CSS.JavaScript.jQuery.那么Node.js 能让你以最低的成本快速过渡成为一个全栈工程师(我称这个全栈为伪全栈,我认为的全栈也要精通数 ...

  8. 手把手教你js原生瀑布流效果实现

    手把手教你js原生瀑布流效果实现 什么是瀑布流效果 首先,让我们先看一段动画: 在动画中,我们不难发现,这个动画有以下特点: 1.所有的图片的宽度都是一样的 2.所有的图片的高度是不一样的 3.图片一 ...

  9. 15、js 原生基础总结

    Day1 一.什么是JS?   ==基于对象==和==事件驱动==的客户端脚本语言 二.哪一年?哪个公司?谁?第一个名字是什么? 1995,NetScape(网景公司),布兰登(Brendan Eic ...

随机推荐

  1. C++-数据库【1】-C++连接MSSQL数据库

    测试环境—— 系统:Win7 64bit 编译器:VC++ 2015 数据库:MSSQL 2008 R2 #include <Windows.h> #include <stdio.h ...

  2. 【虚拟机】oracle Virtual Box4.2.6虚拟机正在运行的过程中删除了其上的一个备份,之后虚拟机就无法使用了

    原因未知,解决方法没有,网上也没有找到相关的解决方法.偶然的操作导致

  3. BZOJ2506: calc

    Description            给一个长度为n的非负整数序列A1,A2,…,An.现有m个询问,每次询问给出l,r,p,k,问满足l<=i<=r且Ai mod p = k的值 ...

  4. View的滑动

    View的滑动 通过三种方式可以实现View的滑动: 1.通过View本身提供的scrollTo/scrollBy方法来实现滑动 2.通过动画给View施加平移效果来实现滑动 3.通过改变View的L ...

  5. java的值传递笔记

    1. 背景:开发小伙伴突然问我java是值传递还是引用传递,我说当然是值传递,只不过有时候传递一个对象时实际传递的是对象的地址值,所以让人容易产生一种引用传递的假象,貌似在李刚的疯狂java讲义有提到 ...

  6. JS的面向对象编程一:封装

    Javascript是一种基于对象的语言,但它又没有class.这在很长的一段时间里,对JS的面向对象编程的概念很模糊,在编程的时候时有用到,但要说个所以然,却说不出来,所以看了些书,又在网上查了些资 ...

  7. vector、list、deque三者比较

    1.vector是一段连续的内存块,而deque是多个连续的内存块,list是所有数据元素分开保存,可以是任何两个元素都没有连续. 2.vector的查询性能最好,并且的末端增加数据也很好,除非它重新 ...

  8. 使用DataList实现数据分页的技术

    今天做网站的时候,用到了分页技术,我把使用方法记录下来,以便日后查阅以及帮助新手朋友们. DataList控件可以按照列表的形式显示数据表中的多行记录,但是被显示的多行记录没有分页功能,使用起来不太方 ...

  9. 有Maple T.A.自有试题图so easy

    对于想完全控制试题库的用户而言,Maple T.A.是最好的选择.不论您是要利用现有的题库,还是要创建自己的题库,Maple T.A.都可以为您提供功能强大.操作便捷的工具创建数学内容. 1) Ste ...

  10. Android 开发快速导引:Android程序框架【草】

    概述 学习一项新技术之前要先了解这个技术的整体框架,这里先简单说一下 Android 的程序结构. Android App 有四个顶层的类:Activity.Service.ContentProvid ...