针对上一篇jQuery进行一点补充

jQuery事件

  • 单个事件注册
    • 语法:element.事件(function(){});例如:$("div").click(function(){事件处理程序}),其他事件与原生基本一致
    • 比如:mouseovermouseoutblurfocuschangekeydownkeyupresizescroll

事件绑定

  • 事件处理on()绑定事件
    • on()方法在匹配元素上绑定一个或多个事件的事件处理函数
    • 语法规范:element.on(events,[selector],fn)
      • events:一个或多个用空格分隔的事件类型,如:clickkeydown
      • selector:元素的子元素选择器
      • fn:回调函数 即绑定在元素身上的侦听函数
<style>
    div{
        width: 100px;
        height: 100px;
        background-color: #777;
    }
</style>
<div></div>
<!-- 此处引入jQuery文件,你就当这个文件存在吧 -->
<script src="jquery.min.js"></script>
<script>
    $(function() {
        // 单个事件注册
        $("div").click(function() {
            $(this).css("background", "blue");
        });
        $("div").mouseenter(function() {
            $(this).css("background", "red");
        });

        // 事件处理on()
        $("div").on({
            click: function() {
                $(this).css("background", "blue");
            },
            mouseenter: function() {
                $(this).css("background", "red");
            }
            mouseleave: function() {
                $(this).css("background", "purple");
            }
        });
    })
</script>

on()方法的优势:

  1. 可以绑定多个事件,多个事件处理程序
$("div").on({
    mouseover: function(){},
    mouseout: function(){},
    click: function(){}
});

// 如果事件类型是相同的,可以使用下面这种方法
$("div").on("mouseover mouseout", function() {
    $(this).toggleClass("current");
})
  1. 可以实现事件委派操作,事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委派给父元素
$('ul').on('click','li',function() {
    alert('hello world!');
});

在此之前有bind()live()delegate()等方法来处理事件绑定或者事件委派,最新版本的请用on替代他们

解绑事件

off()方法可以移除通过on()方法添加的事件处理程序

$("p").off(); // 解绑p标签所有事件处理程序
$("p").off("click"); // 解绑p标签元素上面的点击事件
$("ul").off("click", "li"); // 解绑事件委托

如果有的事件只想触发一次,可以用one()来绑定事件

$("p").one("click", function() {
    alert(57); // 只触发一次
})

自动触发事件trigger()

  1. 元素.事件() 第一种简写形式,会触发元素的默认行为
  2. 元素.trigger("事件") 第二种自动触发模式,会触发元素的默认行为
<style>
    div{
        width: 100px;
        height: 100px;
        background-color: blue;
    }
</style>
<div></div>
<script>
    $(function() {
        $("div").on("click",function() {
            alert(5);
        });
        // 第一种 元素.事件()
        $("div").click();

        // 第二种 元素.trigger("事件")
        $("div").trigger("click");
    })
</script>

  1. 元素.triggerHandler("事件") 第三种自动触发模式,这种方法不会触发元素的默认行为

jQuery事件对象

事件触发,就会有事件对象的产生

  • element.on(events, [selector],function(event) {})
  • 阻止默认行为:event.preventDefault() 或者 return false
  • 阻止事件冒泡:event.stopPropagation()
<!-- 阻止事件冒泡 -->
<style>
    div{
        width: 100px;
        height: 100px;
        background-color: blue;
    }
</style>
<div></div>
<script>
    $(function() {
        $(document).on("click",function() {
            alert(7);
        });
        $("div").on("click",function() {
            alert(5);
            event.stopPropagation();
        });
    })
</script>

jQuery里面的一些常用方法

如果想要把某个对象拷贝(合并)给另外一个对象使用,此时可以用$.extend()方法

  • 语法:$.extend([deep], target, object1, [objectN])
    • deep:如果设为true为深拷贝,默认为false浅拷贝
    • target:要拷贝的目标对象
    • object1:待拷贝到第一个对象的对象
$(function() {
    /* let targetObj = {};
    let obj = {
        id: 1,
        name: "andy"
    };
    $.extend(targetObj, obj);
    console.log(targetObj); */

    /* let targetObj = {
        id: 0
    };
    let obj = {
        id: 1,
        name: "andy"
    };
    $.extend(targetObj, obj);
    console.log(targetObj); // 会覆盖targetObj里面原来的数据 */

    let targetObj = {
        id: 0
    };
    let obj = {
        id: 1,
        name: "andy"
        byc: {
            age: 18
        }
    };
    $.extend(targetObj, obj);
    console.log(targetObj);
})
  • 浅拷贝是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象
  • 深拷贝,前面加true,完全克隆(拷贝的是对象,不是地址),修改目标对象不会影响被拷贝对象

多库共存

  • 问题概述:jQuery使用$作为标识符,随着jQuery的流行,其它JS库也会用这种$作为标识符,这样一起使用会引起冲突
  • 客观需求:需要一个解决方案,让jQuery和其他的JS库不存在冲突,可以同时存在,这就叫做多库共存
  • jQuery解决方案
  1. 把里面的符号统一改为jQuery,例如:jQuery("div")
  2. 让jQuery释放对$控制权,让用户自己决定(jQuery变量规定新的名称):$noConflict() let xx = $noConflict();

jQuery插件

jQuery功能比较有限,想要更复杂的特效效果,可以借助于jQuery插件完成

  • 注意:这些插件也是基于jQuery来完成的,所以必须要先引入jQuery文件,因此也称为jQuery插件
  • 推荐两个JS插件常用的网站http://www.jq22.com/http://www.htmleaf.com/
  • jQuery插件使用步骤
    • 引入相关文件(jQuery文件和插件文件)
    • 复制相关html、css、js(调用插件)

推荐案例练习:瀑布流(图片懒加载)、轮播图(3D切换版)

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

推荐阅读更多精彩内容