前端JavaScript

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

2020-04-28  本文已影响0人  晚月川

jQuery事件

事件绑定

<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);
})

多库共存

  • 问题概述: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/

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

  • 图片懒加载:就是当我们页面滚动到可视区域在显示图片(图片使用延迟加载可提高网页下载速度,它也能帮助减轻服务器负载)
上一篇下一篇

猜你喜欢

热点阅读