4.27
var a = 1;
|
zhangxinyin 0:05:59
function fn(){
var a = 100: function a(){ } } 问 |
zhangxinyin 0:06:04
console.log(a=???)
|
zhangxinyin 0:06:18
fn();
|
木頭 0:07:39
function a(){ }这个a跟变量的a没关系的吧
|
zhangxinyin 0:10:40
var goo=1
function bar() { goo = 10; function goo(){} } bar(); console.log(goo);关键问题是最后输出结果是1而不是10 |
zhangxinyin 0:10:44
别人问的
|
zhangxinyin 0:10:48
你看看这种题目很简单
|
zhangxinyin 0:10:56
必须不是10
|
zhangxinyin 0:11:04
你看 它做了什么事情
|
zhangxinyin 0:11:09
function goo(){}
|
zhangxinyin 0:11:21
既然已经这样了
|
zhangxinyin 0:11:30
说名goo 已经在局部定义了
|
zhangxinyin 0:11:33
那么goo = 10
|
zhangxinyin 0:11:37
不是全局了
|
zhangxinyin 0:11:38
肯定等于1
|
zhangxinyin 0:11:40
ok?
|
zhangxinyin 0:11:53
这种小问题
|
木頭 0:12:30
嗯
|
zhangxinyin 0:12:51
这个 function goo(){} 会被提升到函数顶部
|
zhangxinyin 0:12:53
我也说过
|
zhangxinyin 0:13:04
var goo=1
function bar() { goo = 10; console.log(goo); function goo(){} console.log(goo); } bar(); console.log(goo); |
zhangxinyin 0:13:16
如果没有 function goo()
|
zhangxinyin 0:13:28
那么
|
zhangxinyin 0:13:35
就是10
|
zhangxinyin 0:13:45
不过你想想
|
zhangxinyin 0:13:52
面试怎么可能给你做那么简单的题目呢
|
首先是window对象
|
zhangxinyin 19:40:43
是最顶层的
|
zhangxinyin 19:40:59
document 也属于window
|
zhangxinyin 19:41:01
ok?
|
zhangxinyin 19:41:05
document也是对象
|
木頭 19:41:08
ok
|
zhangxinyin 19:41:27
直接打出来看就行了
|
zhangxinyin 19:42:04
|
zhangxinyin 19:42:06
history
|
zhangxinyin 19:42:13
|
zhangxinyin 19:42:14
document
|
zhangxinyin 19:42:17
都是它的对象
|
zhangxinyin 19:42:36
screen
|
zhangxinyin 19:42:37
根本不用
|
zhangxinyin 19:42:46
|
zhangxinyin 19:42:52
这个是screen下面的属性
|
zhangxinyin 19:42:53
懂?
|
zhangxinyin 19:43:00
你想拿到 颜色深度
|
zhangxinyin 19:43:05
就这样啊
|
木頭 19:43:09
screen是屏幕分辨率的吗
|
zhangxinyin 19:43:17
屏幕啊
|
zhangxinyin 19:43:27
你直接console
|
zhangxinyin 19:43:31
window
|
zhangxinyin 19:43:34
然后找到 screen对象
|
zhangxinyin 19:43:43
|
zhangxinyin 19:43:44
ok?
|
木頭 19:43:45
ok
|
zhangxinyin 19:43:51
它下面很多属性不就有了吗
|
zhangxinyin 19:43:53
一看就知道了
|
zhangxinyin 19:44:02
颜色深度 24
|
zhangxinyin 19:44:09
如何获取?
|
zhangxinyin 19:44:11
简单
|
zhangxinyin 19:44:53
就这样啊
|
zhangxinyin 19:44:58
你以为呢?
|
zhangxinyin 19:45:03
所以自己要学会看
|
zhangxinyin 19:45:49
找到这个对象 点开
|
zhangxinyin 19:45:51
属性方法都有
|
zhangxinyin 19:45:56
比如location对象
|
木頭 19:46:02
ok
|
zhangxinyin 19:46:12
|
zhangxinyin 19:46:14
不都有吗
|
zhangxinyin 19:46:25
比如当前 主机 port 端口
|
zhangxinyin 19:46:28
都有啊
|
zhangxinyin 19:46:32
你直接获取啊
|
zhangxinyin 19:47:05
我这里是localhost
|
zhangxinyin 19:47:13
|
木頭 19:47:59
明白了,就是对象所有的属性,方法都在里面
|
zhangxinyin 19:48:07
你可以自己看啊
|
zhangxinyin 19:48:09
event也一样
|
zhangxinyin 19:48:33
比如location.href
|
zhangxinyin 19:48:35
跳转
|
zhangxinyin 19:48:36
不要说了吧
|
zhangxinyin 19:48:46
一打开
|
zhangxinyin 19:48:50
跳到美丽说了
|
zhangxinyin 19:49:10
我只说常用的
|
zhangxinyin 19:49:12
hash
|
是什么
|
zhangxinyin 19:49:19
hash是 # 后面的
|
zhangxinyin 19:50:02
明白?
|
木頭 19:50:29
明白,每个链接都有hash是吗
|
zhangxinyin 19:50:36
不是的
|
zhangxinyin 19:50:48
hash可以做配合ajax做单页切换
|
zhangxinyin 19:50:55
因为这样就不需要整页刷新了啊
|
木頭 19:51:00
哦
|
zhangxinyin 19:51:01
我重要你某个部分
|
zhangxinyin 19:51:19
比如
|
zhangxinyin 19:51:21
我点第一个
|
zhangxinyin 19:51:25
那么就是#part1
|
zhangxinyin 19:51:26
你看小米
|
木頭 19:54:31
不要4咯,直接小米咯
|
zhangxinyin 19:54:34
我忘记了
|
zhangxinyin 19:54:54
在这看我点击
|
zhangxinyin 19:55:03
|
zhangxinyin 19:55:10
|
zhangxinyin 19:55:12
ok?
|
zhangxinyin 19:55:28
你可以通过js 来处理
|
木頭 19:55:33
它们不是都在同一个页面的吗
|
zhangxinyin 19:55:36
是的呀
|
zhangxinyin 19:55:37
但是你想啊
|
zhangxinyin 19:55:44
不然有些地方要ajax
|
zhangxinyin 19:55:52
你要全局刷新?
|
zhangxinyin 19:55:58
没必要吧
|
zhangxinyin 19:56:01
我只要这一部分的
|
木頭 19:56:04
明白了
|
zhangxinyin 19:56:11
我通过 #fea-five
|
zhangxinyin 19:56:16
我就知道我在第几个页面了
|
zhangxinyin 19:56:35
|
zhangxinyin 19:56:39
效果很简单
|
zhangxinyin 19:56:41
-500%
|
zhangxinyin 19:56:45
我估计下面就-1000%了
|
zhangxinyin 19:56:52
-600%
|
zhangxinyin 19:56:58
那么下面就是 -700%了
|
zhangxinyin 19:57:00
可以猜的
|
zhangxinyin 19:57:06
看到没
|
zhangxinyin 19:57:11
第一个就是0%
|
木頭 19:57:23
看到
|
zhangxinyin 19:57:24
自己去猜
|
zhangxinyin 19:57:35
所以这个elements非常重要
|
zhangxinyin 19:57:43
你猜猜就知道它怎么做的了
|
zhangxinyin 19:57:59
下一个
|
zhangxinyin 19:58:06
location就说到这里
|
zhangxinyin 19:58:08
其他不常用
|
zhangxinyin 19:58:10
就一个跳转
|
zhangxinyin 19:58:11
hash
|
zhangxinyin 19:58:25
history
|
zhangxinyin 19:58:28
就不用说了吧
|
zhangxinyin 19:58:35
什么前一页 后一页
|
木頭 19:58:52
就是浏览器的历史记录吗
|
zhangxinyin 19:59:08
你看好
|
zhangxinyin 19:59:13
我go(-1_
|
zhangxinyin 19:59:13
)
|
zhangxinyin 19:59:32
http://localhost/bom/location3.html#part1
|
zhangxinyin 19:59:39
是不是到#part1了?
|
zhangxinyin 19:59:41
我继续
|
zhangxinyin 19:59:43
go(1)
|
zhangxinyin 20:00:22
明白?
|
你看啊现在是sdfdfsf
|
zhangxinyin 20:00:33
我go(-1_
|
木頭 20:00:48
明白了
|
zhangxinyin 20:00:53
其实很少用
|
zhangxinyin 20:00:58
h5有个 pushstate
|
zhangxinyin 20:01:04
专门操作历史纪录的
|
zhangxinyin 20:01:15
pushstate + ajax + hash 做单页
|
zhangxinyin 20:01:47
navigator对象
|
zhangxinyin 20:01:52
常见的
|
zhangxinyin 20:01:56
比如 geolocation
|
zhangxinyin 20:02:03
h5的地理位置
|
zhangxinyin 20:02:08
稍后会说
|
zhangxinyin 20:02:15
onLine 判断用户是不是离线
|
zhangxinyin 20:02:18
还是在线
|
zhangxinyin 20:02:26
常见的
|
zhangxinyin 20:02:30
就是 userAgent
|
zhangxinyin 20:02:34
你都看的到的
|
zhangxinyin 20:02:35
懂?
|
zhangxinyin 20:02:45
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2272.101 Safari/537.36"
|
zhangxinyin 20:02:46
下面都有
|
zhangxinyin 20:03:00
比如要判断是 android 还是 ios
|
zhangxinyin 20:03:08
var isAndroid = /android/i.test(navigator.userAgent);
|
zhangxinyin 20:03:17
写个正则去判断下
|
zhangxinyin 20:03:32
这种东西网上多的是
|
zhangxinyin 20:03:47
你只要知道navigator
|
zhangxinyin 20:03:48
对象
|
zhangxinyin 20:03:52
有个userAgent属性
|
zhangxinyin 20:03:54
是判断客户端的
|
zhangxinyin 20:04:00
用户代理的
|
zhangxinyin 20:04:05
比如你用的是 ipad
|
zhangxinyin 20:04:08
android
|
zhangxinyin 20:04:13
还是chrome
|
zhangxinyin 20:04:14
firefox
|
zhangxinyin 20:04:15
等等
|
zhangxinyin 20:04:24
比如你是用的 ipad
|
木頭 20:04:35
那判断浏览器就是用它吗
|
zhangxinyin 20:04:37
那么我就根据给我的客户端
|
zhangxinyin 20:04:49
我就给你用 location.href= "m.taobao.com"
|
zhangxinyin 20:04:51
懂吧
|
zhangxinyin 20:04:59
确实是这样的啊
|
zhangxinyin 20:05:03
你看我同样访问淘宝网
|
zhangxinyin 20:05:16
pc
|
zhangxinyin 20:05:18
是这样的
|
zhangxinyin 20:05:34
你在看看
|
zhangxinyin 20:05:40
|
zhangxinyin 20:06:00
明白?
|
木頭 20:06:06
明白了
|
zhangxinyin 20:06:11
几个对象介绍完了
|
zhangxinyin 20:06:15
document 不说了吧
|
zhangxinyin 20:06:22
比如document.getElementById
|
zhangxinyin 20:06:23
...
|
zhangxinyin 20:06:32
它下面有恨多方法
|
zhangxinyin 20:06:35
你可以自己看
|
zhangxinyin 20:07:18
document就是整个文档
|
zhangxinyin 20:07:51
这样bom就说完了
|
zhangxinyin 20:07:53
没问题吧
|
zhangxinyin 20:07:56
其他的东西别看来
|
zhangxinyin 20:07:57
了
|
zhangxinyin 20:07:59
用不上
|
zhangxinyin 20:08:02
什么屏幕分辨率
|
clientHeight和clientWidth用于描述元素内尺寸,是指元素内容+内边距大小,不包括边框(低版本IE下实际包括)、外边距、滚动条部分
|
zhangxinyin 20:12:18
有边框吗?
|
zhangxinyin 20:12:24
没有 那更简单了
|
zhangxinyin 20:12:28
各自-10
|
zhangxinyin 20:12:52
兼容性 我不说了
|
zhangxinyin 20:13:00
我现在所有的都考虑新版本
|
zhangxinyin 20:13:18
ok?
|
zhangxinyin 20:13:26
这样4个就学会了
|
zhangxinyin 20:13:29
你用jquery更简单
|
zhangxinyin 20:13:36
width()
|
zhangxinyin 20:13:46
人家都帮你做好兼容了
|
zhangxinyin 20:14:00
现在你知道什么 意思 jquery我一节课要说掉恨多
|
zhangxinyin 20:14:05
因为js有兼容性问题
|
zhangxinyin 20:14:09
jquery兼容性都做好了
|
zhangxinyin 20:14:11
放心用
|
zhangxinyin 20:14:23
offsetParent对象是指元素最近的定位(relative,absolute,fixed)祖先元素,递归上溯,如果没有祖先元素是定位的话,会返回null
|
zhangxinyin 20:14:50
是body
|
zhangxinyin 20:15:12
你觉得太简单了
|
zhangxinyin 20:15:14
来个复杂点的
|
zhangxinyin 20:15:57
也是body为神马呢
|
zhangxinyin 20:16:03
因为最近的元素没有定位啊
|
zhangxinyin 20:16:14
比如我给div加一个定位
|
zhangxinyin 20:16:47
ok?
|
木頭 20:16:54
只返回有定位的父元素是吧,ok
|
zhangxinyin 20:17:01
但是又兼容性的问题
|
zhangxinyin 20:17:14
没有就网上找啊
|
zhangxinyin 20:17:23
那我问你
|
zhangxinyin 20:17:26
body的呢?
|
zhangxinyin 20:17:30
html吧
|
是不是到头了?
|
zhangxinyin 20:18:44
offsetParent对象是指元素最近的定位(relative,absolute,fixed)祖先元素,递归上溯,如果没有祖先元素是定位的话,会返回null
|
木頭 20:18:53
是吧
|
zhangxinyin 20:19:03
offsetParent一般用语
|
zhangxinyin 20:19:12
这个元素到某个元素的距离‘
|
zhangxinyin 20:19:13
懂吧
|
zhangxinyin 20:19:30
某个元素到body距离
|
zhangxinyin 20:19:39
你想啊
|
zhangxinyin 20:19:42
你要做个 楼层的
|
zhangxinyin 20:19:47
1楼 服装
2楼 xxx |
zhangxinyin 20:20:04
你是不是要得到它到最顶端的距离?
|
木頭 20:20:11
嗯
|
zhangxinyin 20:20:14
那你要加起来的
|
zhangxinyin 20:20:24
可能
|
zhangxinyin 20:20:27
每天就做这个案例
|
zhangxinyin 20:20:37
今天这些东西都要掌握
|
zhangxinyin 20:20:42
offsetLeft
|
zhangxinyin 20:21:11
offsetTop
|
zhangxinyin 20:21:17
我想问下
|
zhangxinyin 20:21:26
div -> body (offsetLeft)多少
|
zhangxinyin 20:21:28
简单
|
zhangxinyin 20:21:29
50
|
zhangxinyin 20:21:52
offsetTop和offsetLeft表示该元素的左上角(边框外边缘)与已定位的父容器(offsetParent对象)左上角的距离
|
zhangxinyin 20:22:04
div的offsetParent是 body吧
|
zhangxinyin 20:22:14
那么离它左上角距离多少呢
|
zhangxinyin 20:22:16
明显吧
|
zhangxinyin 20:22:17
50
|
zhangxinyin 20:22:20
margin50
|
zhangxinyin 20:22:28
top呢
|
zhangxinyin 20:22:29
也是
|
木頭 20:22:35
就是外边距吗
|
zhangxinyin 20:22:58
看下去
|
zhangxinyin 20:22:59
span呢?
|
zhangxinyin 20:23:17
不是margin
|
zhangxinyin 20:23:26
只要有边距
|
zhangxinyin 20:23:29
为什么span不是70呢
|
zhangxinyin 20:23:37
因为 span的offsetParent是div
|
zhangxinyin 20:23:42
懂?
|
zhangxinyin 20:23:49
有20个px padding
|
zhangxinyin 20:23:54
所以我加了个颜色
|
zhangxinyin 20:23:57
如果 我去掉定位
|
木頭 20:24:01
懂了,就是它跟父元素的距离
|
zhangxinyin 20:24:05
不是父元素
|
zhangxinyin 20:24:10
父元素是 parentNode
|
zhangxinyin 20:24:20
有定位的父元素是 offsetParent
|
zhangxinyin 20:24:22
概念不一样
|
zhangxinyin 20:24:24
我去掉呢
|
zhangxinyin 20:24:34
我去掉的话就是70
|
zhangxinyin 20:24:43
你说为什么是75
|
zhangxinyin 20:24:46
还有边框
|
木頭 20:24:55
去掉定位?
|
zhangxinyin 20:25:05
我去掉了div的 relative
|
zhangxinyin 20:25:12
那么span的offsetParent是body
|
zhangxinyin 20:25:17
|
zhangxinyin 20:25:46
那么肯定是 75
|
zhangxinyin 20:25:52
50margin + 5 border + 20padding
|
zhangxinyin 20:26:01
ok
|
木頭 20:26:05
ok
|
zhangxinyin 20:26:06
如果
|
zhangxinyin 20:26:10
有定位父级是div
|
是不是到头了?
|
zhangxinyin 20:18:44
offsetParent对象是指元素最近的定位(relative,absolute,fixed)祖先元素,递归上溯,如果没有祖先元素是定位的话,会返回null
|
木頭 20:18:53
是吧
|
zhangxinyin 20:19:03
offsetParent一般用语
|
zhangxinyin 20:19:12
这个元素到某个元素的距离‘
|
zhangxinyin 20:19:13
懂吧
|
zhangxinyin 20:19:30
某个元素到body距离
|
zhangxinyin 20:19:39
你想啊
|
zhangxinyin 20:19:42
你要做个 楼层的
|
zhangxinyin 20:19:47
1楼 服装
2楼 xxx |
zhangxinyin 20:20:04
你是不是要得到它到最顶端的距离?
|
木頭 20:20:11
嗯
|
zhangxinyin 20:20:14
那你要加起来的
|
zhangxinyin 20:20:24
可能
|
zhangxinyin 20:20:27
每天就做这个案例
|
zhangxinyin 20:20:37
今天这些东西都要掌握
|
zhangxinyin 20:20:42
offsetLeft
|
zhangxinyin 20:21:11
offsetTop
|
zhangxinyin 20:21:17
我想问下
|
zhangxinyin 20:21:26
div -> body (offsetLeft)多少
|
zhangxinyin 20:21:28
简单
|
zhangxinyin 20:21:29
50
|
zhangxinyin 20:21:52
offsetTop和offsetLeft表示该元素的左上角(边框外边缘)与已定位的父容器(offsetParent对象)左上角的距离
|
zhangxinyin 20:22:04
div的offsetParent是 body吧
|
zhangxinyin 20:22:14
那么离它左上角距离多少呢
|
zhangxinyin 20:22:16
明显吧
|
zhangxinyin 20:22:17
50
|
zhangxinyin 20:22:20
margin50
|
zhangxinyin 20:22:28
top呢
|
zhangxinyin 20:22:29
也是
|
木頭 20:22:35
就是外边距吗
|
zhangxinyin 20:22:58
看下去
|
zhangxinyin 20:22:59
span呢?
|
zhangxinyin 20:23:17
不是margin
|
zhangxinyin 20:23:26
只要有边距
|
zhangxinyin 20:23:29
为什么span不是70呢
|
zhangxinyin 20:23:37
因为 span的offsetParent是div
|
zhangxinyin 20:23:42
懂?
|
zhangxinyin 20:23:49
有20个px padding
|
zhangxinyin 20:23:54
所以我加了个颜色
|
zhangxinyin 20:23:57
如果 我去掉定位
|
木頭 20:24:01
懂了,就是它跟父元素的距离
|
zhangxinyin 20:24:05
不是父元素
|
zhangxinyin 20:24:10
父元素是 parentNode
|
zhangxinyin 20:24:20
有定位的父元素是 offsetParent
|
zhangxinyin 20:24:22
概念不一样
|
zhangxinyin 20:24:24
我去掉呢
|
zhangxinyin 20:24:34
我去掉的话就是70
|
zhangxinyin 20:24:43
你说为什么是75
|
zhangxinyin 20:24:46
还有边框
|
木頭 20:24:55
去掉定位?
|
zhangxinyin 20:25:05
我去掉了div的 relative
|
zhangxinyin 20:25:12
那么span的offsetParent是body
|
zhangxinyin 20:25:17
|
zhangxinyin 20:25:46
那么肯定是 75
|
zhangxinyin 20:25:52
50margin + 5 border + 20padding
|
zhangxinyin 20:26:01
ok
|
木頭 20:26:05
ok
|
zhangxinyin 20:26:06
如果
|
zhangxinyin 20:26:10
有定位父级是div
|
就是20
|
zhangxinyin 20:26:28
padding啊
|
zhangxinyin 20:26:29
必须的
|
木頭 20:27:00
这些一般是做什么用的呀
|
zhangxinyin 20:27:06
比如有个相册
|
zhangxinyin 20:27:13
左 右
|
zhangxinyin 20:27:24
你怎么知道你点击图片
|
zhangxinyin 20:27:26
是在左边
|
zhangxinyin 20:27:29
还是右边
|
zhangxinyin 20:27:32
ok?
|
zhangxinyin 20:27:44
那你是不是要加上 offsetLeft?
|
木頭 20:27:49
ok
|
zhangxinyin 20:28:05
如果你鼠标的位置 > photo.offsetLeft + photo.本身宽度的 / 2
|
zhangxinyin 20:28:11
那么就在右边了啊
|
zhangxinyin 20:28:14
ok?
|
木頭 20:28:22
ok
|
zhangxinyin 20:28:41
鼠标位置好拿吧
|
zhangxinyin 20:28:45
evt.clientX
|
zhangxinyin 20:29:05
这个到案例了会说的
|
zhangxinyin 20:29:10
其实和选项卡差不多
|
zhangxinyin 20:29:15
就是多了这么个东西
|
木頭 20:29:20
好
|
zhangxinyin 20:29:34
scrollLeft和scrollTop是指元素滚动条位置,它们是可写的
|
zhangxinyin 20:29:43
比如你想知道
|
zhangxinyin 20:29:48
你滚动了多少距离
|
zhangxinyin 20:29:55
一般 竖着滚动多
|
zhangxinyin 20:30:00
也就是 scrollTop
|
zhangxinyin 20:30:11
那你怎么知道你滚动了多少?
|
zhangxinyin 20:30:13
或者 有时候
|
zhangxinyin 20:30:20
你要加上这段距离怎么办?
|
zhangxinyin 20:30:27
那就通过这个来获取
|
zhangxinyin 20:30:32
我就举一个例子
|
zhangxinyin 20:31:38
加个高度
|
zhangxinyin 20:31:42
我开始滚动了哦
|
zhangxinyin 20:31:53
差不多了
|
zhangxinyin 20:31:54
我点击
|
zhangxinyin 20:32:02
0
|
zhangxinyin 20:32:04
为什么是0
|
zhangxinyin 20:32:08
因为有兼容性问题
|
zhangxinyin 20:32:13
这个要用body
|
zhangxinyin 20:32:33
996
|
zhangxinyin 20:32:35
明白?
|
zhangxinyin 20:32:38
这个有什么用
|
zhangxinyin 20:32:44
还记得回到顶部吗
|
zhangxinyin 20:32:46
直接设置0
|
zhangxinyin 20:32:48
不就完事了吗
|
zhangxinyin 20:32:54
比如我改下代码
|
zhangxinyin 20:33:04
这个可以设置的
|
zhangxinyin 20:33:33
很下面了吧
|
zhangxinyin 20:33:36
我点了哦
|
zhangxinyin 20:33:43
到上面来了
|
zhangxinyin 20:33:57
我做的详细点吧
|
zhangxinyin 20:35:12
当我一点击
|
zhangxinyin 20:35:15
就回到顶部
|
木頭 20:35:20
明白了
|
zhangxinyin 20:35:53
现在只是介绍这些知识点
|
zhangxinyin 20:36:00
到时候要用的
|
zhangxinyin 20:36:10
然后
|
zhangxinyin 20:36:17
怎么获取浏览器 可视区宽度
|
zhangxinyin 20:37:10
现在是1120 x 280
|
那我缩小
|
zhangxinyin 20:37:25
看到了吗
|
木頭 20:37:30
看到
|
zhangxinyin 20:37:35
585 "x" 151
|
zhangxinyin 20:37:41
那你 在 resized俄时候
|
zhangxinyin 20:37:44
要重新设置元素的位置
|
zhangxinyin 20:37:45
懂?
|
zhangxinyin 20:37:52
因为这个宽度会变
|
zhangxinyin 20:38:11
function getViewPortSize(w) {
var w = w || window; if (w.innerWidth != null) return { w: w.innerWidth, h: w.innerHeight }; var d = w.document; if (document.compatMode == "CSS1Compat") return { w: d.documentElement.clientWidth, h: d.documentElement.clientHeight }; return { w: d.body.clientWidth, h: d.body.clientHeight }; } |
zhangxinyin 20:38:25
IE浏览器 innerWidth
|
zhangxinyin 20:38:33
那么有些支持 clientWidth
|
zhangxinyin 20:38:38
那么就写一个兼容性函数
|
zhangxinyin 20:38:40
懂吧
|
zhangxinyin 20:38:43
用的时候恨简单
|
zhangxinyin 20:39:39
是不是一样的
|
zhangxinyin 20:39:42
只是做了兼容处理
|
zhangxinyin 20:39:44
做成了函数
|
zhangxinyin 20:39:51
这样不用我说了吧
|
zhangxinyin 20:39:55
和 addEvent 一样
|
zhangxinyin 20:39:57
自己封装一个
|
zhangxinyin 20:40:06
这个网上多的是
|
zhangxinyin 20:40:09
封装好调用就行了
|
zhangxinyin 20:40:11
没必要
|
zhangxinyin 20:40:13
每次写那么长
|
zhangxinyin 20:40:24
我函数名 一调用多方便
|
zhangxinyin 20:40:41
function getScrollOffsets(w) {
var w = w || window; if (w.pageXoffset != null) { return { x: w.pageXoffset, y: pageYoffset }; } var doc = w.document; if (document.compatMode == "CSS1Compat"){ return { x: doc.documentElement.scrollLeft, y: doc.documentElement.scrollTop }; } return { x: doc.body.scrollLeft, y: doc.body.scrollTop }; } |
zhangxinyin 20:40:45
这个也一样
|
zhangxinyin 20:40:48
对 scrollTop
|
zhangxinyin 20:40:50
做了封装
|
zhangxinyin 20:44:09
好了
|
zhangxinyin 20:44:41
这个是获取
|
zhangxinyin 20:44:43
get都是获取
|
zhangxinyin 20:44:46
明白?
|
zhangxinyin 20:45:03
只是封装好了
|
zhangxinyin 20:45:15
其实返回一个对象
|
zhangxinyin 20:45:18
你就调用就行了
|
zhangxinyin 20:45:24
比如 函数名().x
|
zhangxinyin 20:45:32
分2步写就这样
|
zhangxinyin 20:45:47
var 对象 (函数返回值) = 执行函数();
对象.属性 |
zhangxinyin 20:45:55
你也可以一步写完
|
zhangxinyin 20:46:02
执行函数().属性
|
zhangxinyin 20:46:08
因为 执行函数已经返回的是对象
|
zhangxinyin 20:46:09
ok?
|
木頭 20:46:22
ok
|
zhangxinyin 20:46:25
function getPosition(ele) { var x = 0, y = 0; while (ele != null) { x += ele.offsetLeft; y += ele.offsetTop; e = ele.offsetParent; } return { x: x, y: y }; } |
zhangxinyin 20:46:30
这个更简单了
|
zhangxinyin 20:46:34
还记得我说过 span吗
|
zhangxinyin 20:46:49
span offsetparent
|
zhangxinyin 20:46:51
是div吧
|
zhangxinyin 20:46:57
那么到 div距离是 20
|
zhangxinyin 20:47:07
我现在想获取它到 body的呢
|
zhangxinyin 20:47:09
更简单了
|
zhangxinyin 20:47:13
传个span进去
|
zhangxinyin 20:47:16
给你返回一个 x y
|
zhangxinyin 20:47:18
就行了
|
zhangxinyin 20:47:24
其实它做了累加
|
zhangxinyin 20:47:30
你知道实现原理就行
|
zhangxinyin 20:49:20
明白了吧
|
木頭 20:49:33
这个函数是干什么的?
|
zhangxinyin 20:49:42
比如 先累加 span到div的距离
|
那我缩小
|
zhangxinyin 20:37:25
看到了吗
|
木頭 20:37:30
看到
|
zhangxinyin 20:37:35
585 "x" 151
|
zhangxinyin 20:37:41
那你 在 resized俄时候
|
zhangxinyin 20:37:44
要重新设置元素的位置
|
zhangxinyin 20:37:45
懂?
|
zhangxinyin 20:37:52
因为这个宽度会变
|
zhangxinyin 20:38:11
function getViewPortSize(w) {
var w = w || window; if (w.innerWidth != null) return { w: w.innerWidth, h: w.innerHeight }; var d = w.document; if (document.compatMode == "CSS1Compat") return { w: d.documentElement.clientWidth, h: d.documentElement.clientHeight }; return { w: d.body.clientWidth, h: d.body.clientHeight }; } |
zhangxinyin 20:38:25
IE浏览器 innerWidth
|
zhangxinyin 20:38:33
那么有些支持 clientWidth
|
zhangxinyin 20:38:38
那么就写一个兼容性函数
|
zhangxinyin 20:38:40
懂吧
|
zhangxinyin 20:38:43
用的时候恨简单
|
zhangxinyin 20:39:39
是不是一样的
|
zhangxinyin 20:39:42
只是做了兼容处理
|
zhangxinyin 20:39:44
做成了函数
|
zhangxinyin 20:39:51
这样不用我说了吧
|
zhangxinyin 20:39:55
和 addEvent 一样
|
zhangxinyin 20:39:57
自己封装一个
|
zhangxinyin 20:40:06
这个网上多的是
|
zhangxinyin 20:40:09
封装好调用就行了
|
zhangxinyin 20:40:11
没必要
|
zhangxinyin 20:40:13
每次写那么长
|
zhangxinyin 20:40:24
我函数名 一调用多方便
|
zhangxinyin 20:40:41
function getScrollOffsets(w) {
var w = w || window; if (w.pageXoffset != null) { return { x: w.pageXoffset, y: pageYoffset }; } var doc = w.document; if (document.compatMode == "CSS1Compat"){ return { x: doc.documentElement.scrollLeft, y: doc.documentElement.scrollTop }; } return { x: doc.body.scrollLeft, y: doc.body.scrollTop }; } |
zhangxinyin 20:40:45
这个也一样
|
zhangxinyin 20:40:48
对 scrollTop
|
zhangxinyin 20:40:50
做了封装
|
zhangxinyin 20:44:09
好了
|
zhangxinyin 20:44:41
这个是获取
|
zhangxinyin 20:44:43
get都是获取
|
zhangxinyin 20:44:46
明白?
|
zhangxinyin 20:45:03
只是封装好了
|
zhangxinyin 20:45:15
其实返回一个对象
|
zhangxinyin 20:45:18
你就调用就行了
|
zhangxinyin 20:45:24
比如 函数名().x
|
zhangxinyin 20:45:32
分2步写就这样
|
zhangxinyin 20:45:47
var 对象 (函数返回值) = 执行函数();
对象.属性 |
zhangxinyin 20:45:55
你也可以一步写完
|
zhangxinyin 20:46:02
执行函数().属性
|
zhangxinyin 20:46:08
因为 执行函数已经返回的是对象
|
zhangxinyin 20:46:09
ok?
|
木頭 20:46:22
ok
|
zhangxinyin 20:46:25
function getPosition(ele) { var x = 0, y = 0; while (ele != null) { x += ele.offsetLeft; y += ele.offsetTop; e = ele.offsetParent; } return { x: x, y: y }; } |
zhangxinyin 20:46:30
这个更简单了
|
zhangxinyin 20:46:34
还记得我说过 span吗
|
zhangxinyin 20:46:49
span offsetparent
|
zhangxinyin 20:46:51
是div吧
|
zhangxinyin 20:46:57
那么到 div距离是 20
|
zhangxinyin 20:47:07
我现在想获取它到 body的呢
|
zhangxinyin 20:47:09
更简单了
|
zhangxinyin 20:47:13
传个span进去
|
zhangxinyin 20:47:16
给你返回一个 x y
|
zhangxinyin 20:47:18
就行了
|
zhangxinyin 20:47:24
其实它做了累加
|
zhangxinyin 20:47:30
你知道实现原理就行
|
zhangxinyin 20:49:20
明白了吧
|
木頭 20:49:33
这个函数是干什么的?
|
zhangxinyin 20:49:42
比如 先累加 span到div的距离
|
20
|
zhangxinyin 20:49:50
然后把 span 变成div
|
zhangxinyin 20:49:57
然后累加 div 到 body的距离 50
|
zhangxinyin 20:50:01
吧这些距离加起来
|
zhangxinyin 20:50:06
就是 span -> body的距离
|
zhangxinyin 20:50:08
原因是
|
zhangxinyin 20:50:15
你现在 用offsetleft
|
zhangxinyin 20:50:17
offsetTop
|
zhangxinyin 20:50:25
只能累加 span->div的 left top
|
zhangxinyin 20:50:27
明白?
|
zhangxinyin 20:50:33
你必须要写一个函数
|
zhangxinyin 20:50:43
来做到span到 body的距离
|
zhangxinyin 20:50:50
其实就是累加
|
zhangxinyin 20:51:15
是不是?
|
木頭 20:51:18
是
|
木頭 20:51:42
ok
|
木頭 20:52:34
ok
|
zhangxinyin 20:52:44
ele.offsetParent直到 offsetParent为空位置
|
zhangxinyin 20:52:48
之前我给你演示过了
|
zhangxinyin 20:52:54
到了body就是空了
|
zhangxinyin 20:53:02
然后最后吧 x y
|
zhangxinyin 20:53:06
返回出去
|
zhangxinyin 20:53:07
就行了
|
zhangxinyin 20:53:32
明白了吧
|
zhangxinyin 20:53:36
看看是不是70
|
zhangxinyin 20:53:55
ok?
|
木頭 20:53:59
ok
|
zhangxinyin 20:54:07
如果你想取 x
|
zhangxinyin 20:54:08
y
|
zhangxinyin 20:54:11
不用说了吧
|
zhangxinyin 20:54:32
ok?
|
木頭 20:54:38
ok
|
zhangxinyin 20:54:46
这样无论多少层
|
zhangxinyin 20:54:51
你都能获取到 到body的距离吧
|
zhangxinyin 20:54:59
只要传个对象进去
|
zhangxinyin 20:55:04
就给你返出来了
|
zhangxinyin 20:55:10
有了这些东西
|
zhangxinyin 20:55:19
你就可以做一些例子了
|
zhangxinyin 20:55:36
是不是50
|
zhangxinyin 20:55:41
再来一层
|
zhangxinyin 20:56:30
明白了?
|
zhangxinyin 20:56:33
你自己可以试试
|
zhangxinyin 20:56:38
你先算死
|
zhangxinyin 20:56:41
然后用这个函数一套
|
zhangxinyin 20:56:45
就出来了
|
zhangxinyin 20:56:48
看看是不是一样
|
zhangxinyin 20:56:59
这些概念要全部掌握
|
zhangxinyin 20:57:17
函数我就不带你封装了
|
zhangxinyin 20:57:21
你自己可以封装
|
zhangxinyin 20:57:24
其实都是都一样的
|
zhangxinyin 20:57:35
可以搜下
|
zhangxinyin 20:58:29
网上有的
|
zhangxinyin 20:58:31
没必要自己写
|
zhangxinyin 20:58:40
|
zhangxinyin 20:59:38
ok?
|
木頭 21:00:10
原理有点懂,只是函数怎么写要好好看看才行
|
zhangxinyin 21:00:13
不是的
|
zhangxinyin 21:00:21
这些东西是你之前掌握的
|
zhangxinyin 21:00:24
不是现在掌握的
|
zhangxinyin 21:00:28
所以我一直说
|
自己多封装函数
|
zhangxinyin 21:00:36
这个没办法
|
zhangxinyin 21:00:49
哪怕就是最简单的 "0" + str ? str
|
zhangxinyin 21:00:55
也要封一个
|
zhangxinyin 21:01:01
因为你后面反复会用啊
|
zhangxinyin 21:01:08
上班也这样
|
zhangxinyin 21:01:14
这样的东西让你写
|
zhangxinyin 21:01:18
你还要上班吗?
|
木頭 21:01:28
嗯
|
zhangxinyin 21:01:31
自己看看吧 bom
|
zhangxinyin 21:01:36
bom就介绍道这里了
|