整理一些js容易混淆遗忘的东西

程序猿.jpg

1. 事件冒泡

同种事件同时实现时 子元素优先触发,如以下代码:

...
<input type="button" name="" id="" value="" />
...
var btn = document.querySelector("input");
document.onclick = function () {
    console.log("doc点击");
 }
btn.onclick = function () {
    console.log("btn点击");   
}

点击btn时相对于也点击了整个文档,这是会先打印btn点击,再打印doc点击,在console.log("btn点击");下方添加window.event.cancelBubble = true;,这时只打印btn点击,这就是如何取消事件冒泡.

2.阻止系统的默认事件

鼠标右键时会弹出系统默认的菜单,如果想自己定义一个菜单就要消除系统默认的菜单,在你的右键函数最后写上return false;或者event.preventDefault()即可.但是此方法并不被ie支持,在ie下需要用window.event.returnValue = false;来实现.(我是比较讨厌ie的,大家都懂的...), 下面是我写的右键菜单,比较简单,代码就不写了哈.

鼠标右键.png

3.几个事件兼容

(1)firefox

firefox火狐浏览器中事件为触发函数的第一个参数
其他浏览器为window.event

var evObj = ev || window.event;

(2)兼容ie的事件绑定函数

...
div{
    width: 100px;
    height: 100px;
    background-color: yellow;
}
...
<div></div>
...
var div = document.querySelector('div');
if(window.navigator.userAgent.indexOf() =='IE'){
    div.addEventListener('onclick' ,function(){
        alert(1)
    })
    }else{
        div.addEventListener('click',function(){
            alert(1)
        })
}

window.navigator.userAgent.indexOf() ==‘IE’也可以写成window.navigator.userAgent.indexOf(‘IE’) == -1

(3)事件监听兼容

function fn() {
    alert(1);
}
if (document.addEventListener) {
    document.addEventListener("click", fn);
} else if (document.attachEvent) {
    // 兼容ie6-8
    // 事件名需要加on
    document.addEventListener("onclick", fn)
}

document.attachEvent就是为了兼容IE6-IE8,而且事件名要加on

3.各种宽度

clientWidth 包括widthpadding
offsetWidth 包括width,paddingborder

innerWidth 包括widthpadding
outerWidth 包括width,paddingborder

4.时间获取

getDay() 返回表示星期的某一天的数字, 如果今天是周二就返回2
getDate() 返回月份的某一天, 如果今天是17号就返回17
getTime() 返回距 1970 年 1 月 1 日之间的毫秒数

5.cookie

cookie: 保存在浏览器上的数据
大小: 5kb
数据类型: 数字/字符串
数据格式: 键值对(key-value)
用处: 登录界面,保存用户名和密码

document.cookie = "user1=marry;";
document.cookie = "pwd=123456;";
document.cookie = "user=bibhi;";
// 保存到cookie的数据是一整个字符串 
// string.split(分割符) 字符串切割
var cookies = document.cookie.split("; ");
for (var i = 0; i < cookies.length; i++) {
        // 把每一个条目通过=切割
        // 0位 -> 条目的描述(key)
        // 1位 -> 具体的值(value)
        var t = cookies[i].split("=");
        console.log(t[0]);
        console.log(t[1]);
}
打印结果.png

保存用户名和密码这种东西可以写一个框架,以后要的时候调用就可以了,框架如下:

function setCookie(name, www) {
    document.cookie = name + "=" + www + ";";
}
// 获取
function getCookie(name) {
    // 条目数组
    var cookies = document.cookie.split("; ")
    for (var i = 0; i < cookies.length; i++) {
        var a = cookies[i].split("=")
            // a中包含两个数据
            // 0->name
            // 1->www
        if (a[0] == name) {
            return a[1];
        }
    }
    // 如果没有找到对应内容返回false
    return false;
}
function removeCookie(name) {
    setCookie(name,"");
}

忘了写cookie的一些注意事项了:
1.字符串切割时 使用"; "切割( 要有空格)
2.cookie中不要保存中文
3.当添加的数据key值不存在时 新建条目 , 如果key值存在 覆盖原数据 覆盖后条目在cookie的末尾
4.一旦保存数据会一直存在

6.图片懒加载

如果一个页面很长,照片很多,当用户打开页面时如果所有照片都加载了会很浪费时间,用户体验较差.所以可以设置当用户向下滑动滚轮时再加载剩余的照片,这就是图片懒加载.
整体思想: 当页面滚动的距离大于图片距顶端的距离窗口可视高度的差时,图片开始加载
具体写法如下:

简单的设置下图片的样式:
<style type="text/css">
    img{
        width: 600px;
        height: 400px;
        background-color: #CCCCCC;
        position: absolute;
        top: 1000px;
    }
</style>
注意图片地址要写在 data-src 里
<body>
        <img src="" data-src = "http://img2.zol.com.cn/product/98_940x705/577/ceDYOL5WHbbM.jpg"/>
</body>
js部分:
<script type="text/javascript">
        var img = document.querySelector("img");
        // 图片距顶端距离
        var t = img.offsetTop;
        // 窗口可视高度
        var  h = document.documentElement.clientHeight;
        // 显示图片所需要的最小自动距离
        var distance = t - h;
        // 滑动触发
        window.onscroll = function () {
            // 滑动时 顶端距离
            var scrollTop = document.body.scrollTop || window.pageYOffset ||document.documentElement.scrollTop;
            // 懒加载
            if (scrollTop >= distance) {
                var imPath = img.getAttribute("data-src");
                img.setAttribute("src", imPath);
            }
        }
</script>

这里scrollTop是一个比较头疼的问题,又涉及到兼容的问题
(1)IE6/IE7/IE8:
对于没有doctype声明的页面里可以使用 document.body.scrollTop来获取 scrollTop高度 ;
有声明的可以直接使用document.documentElement.scrollTop;
(2)Firefox:
直接用document.documentElement.scrollTop ;
(3)chrome:
document.body.scrollTopdocument.documentElement.scrollTop ;可能都取不到值
(4)Safari:
有自己获取scrollTop的函数 : window.pageYOffset ;
所以保险的写法就是var scrollTop = document.body.scrollTop || window.pageYOffset ||document.documentElement.scrollTop;, 不管你是啥浏览器我都兼容.yi

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 196,698评论 5 463
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,711评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 143,795评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,699评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,567评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,423评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,822评论 3 387
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,467评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,755评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,789评论 2 314
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,577评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,418评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,837评论 3 300
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,054评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,355评论 1 254
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,820评论 2 343
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,027评论 2 338

推荐阅读更多精彩内容

  • Window和document对象的区别 window对象window对象表示浏览器中打开的窗口window对象是...
    FConfidence阅读 2,143评论 0 5
  • 以下是常用的代码收集,学习用。转自豪情博客园 1. PC - js 返回指定范围的随机数(m-n之间)的公式 re...
    自由加咖啡阅读 989评论 0 1
  • 语法基础 类型转换 1,parseInt(),parseFloat(),Number()要传参,toString(...
    ishgy阅读 476评论 0 0
  • 两行狂柳水畔, 一挺青松山间, 少不凌云荡寰宇, 老来何以话当年, 回首一何惭。 莫笑我等痴狂, 试问天道何方? ...
    wolf野狼阅读 295评论 0 0
  • 也许是对死亡,从小到大父母就没有说太多,清明节给我的印象不深。 我记得最为印象深的,与死亡的两次近距离接触,第一,...
    凤凰涅槃再涅槃阅读 279评论 0 0