02.jquery事件绑定、动画

jquery动画&遍历&事件绑定

前提是导入jquery.js文件<script src=".../jquery-3.2.1.js"></script>或者<script src=".../jquery-3.3.1.min.js"></script>

一、动画

选择器选择的jq对象执行了相关的方法,返回的还是jq对象本身,可以利用这个特性进行链式调用

底层是通过控制【display属性】+【宽高】+【透明】+【定时器】+【清空定时器】实现的

1.默认显示和隐藏的方式

  1. show([speed,[easing],[fn]]) 显示
    • speed: 动画速度。可取slownormalfast,也可以自定义毫秒数值。
    • easing: 切换效果,默认swing,可用参数为linear
      • swing: 慢,中间块,慢
      • linear: 匀速
    • fn: 动画执行完毕时执行的函数,选择器中的每个元素执行一次
  2. hide([speed,[easing],[fn]]) 隐藏
  3. toggle([speed],[easing],[fn]) 显示/隐藏,整合show与hide
<div id="box" style="width: 100px;height: 100px;
background-color: darkcyan;display: none"></div>

<button id="btn1">显示</button>
<button id="btn2">隐藏</button>
<button id="btn3">切换</button>

$(function () {
    $("#btn1").click(function () {
        $("#box").show("normal", "linear");
    });

    $("#btn2").click(function () {
        $("#box").hide(1000)
    });

    $("#btn3").click(function () {
       $("#box").toggle("fast", "swing")
    });
})

2.滑动显示和隐藏方式?

  1. slideDown([speed],[easing],[fn])
  2. slideUp([speed],[easing],[fn])
  3. slideToggle([speed],[easing],[fn])
<div id="box" style="width: 100px;height: 100px;
background-color: darkcyan;display: none"></div>

<button id="btn1">slideDown</button>
<button id="btn2">slideUp</button>
<button id="btn3">slideToggle</button>

$(function () {
    $("#btn1").click(function () {
        $("#box").slideDown("slow", "linear")
    });

    $("#btn2").click(function () {
        $("#box").slideUp(1000)
    });

    $("#btn3").click(function () {
       $("#box").slideToggle("fast", "swing")
    });

3.淡入淡出显示和隐藏方式

  1. fadeIn([speed],[easing],[fn])
  2. fadeOut([speed],[easing],[fn])
  3. fadeToggle([speed],[easing],[fn])
<div id="box" style="width: 100px;height: 100px;
background-color: darkcyan;display: none"></div>

<button id="btn1">fadeIn</button>
<button id="btn2">fadeOut</button>
<button id="btn3">fadeToggle</button>

$(function () {
    $("#btn1").click(function () {
        $("#box").fadeIn("slow", "linear")
    });

    $("#btn2").click(function () {
        $("#box").fadeOut(1000)
    });

    $("#btn3").click(function () {
       $("#box").fadeToggle("fast", "swing")
    });

4.animate自定义动画特效

  1. 语法:animate(params,[speed],[fn])
  2. 参数
    • params: 一组包含作为动画属性和终值的样式和及其值的集合【key:value】的形式
    • speed: [可选参数],三种预定义速度【“slow”、“normal”、“fast”】或者毫秒值
    • fn: [可选参数],动画完成时执行的回调函数,每个元素执行一次。

html代码

<button id="start">start</button>
<button id="stop">stop</button>
<div id="box" style="width: 100px;height: 100px;
background-color: darkcyan;position: absolute"></div>

同时执行效果

$(function () {
    $("#start").click(function () {
        // 同时执行
        $("#box").animate({
            width: '300px',
            height: '300px',
            left: '100px',
            top: '200px'
        }, 2000)
    });
})

顺序执行【链式调用】

$(function () {
    $("#start").click(function () {
        // 顺序执行
        $("#box").animate({left: '100px'}, 2000)
                 .animate({top: '100px'}, 2000)
                 .animate({left: '0'}, 2000)
                 .animate({top: '0'}, 2000)
    });
})

delay延迟效果

$(function () {
    $("#start").click(function () {
        // 延迟效果
        $("#box").animate({left: '100px'}, 2000)
                 .delay(2000)
                 .animate({top: '100px'}, 2000)
    });
})

stop停止动画效果

stop是终止当前正在执行的动画效果,如果有链式调用,不会影响其他的执行

$(function () {
    $("#start").click(function () {
        // 顺序执行
        $("#box").animate({left: '200px'}, 2000)
                 .animate({top: '200px'}, 2000)
                 .animate({left: '0'}, 2000)
                 .animate({top: '0'}, 2000)
    });

    // stop停止动画效果
    $("#stop").click(function () {
        $("#box").stop();
    })
})

5.【案例】右边弹出小广告(核心代码)

<div id="box" style="width: 100px;height: 180px;
     background-color: darkcyan;position: fixed;
     right: 0;
     top: 200px;
     display: none;
     border: 2px solid yellowgreen; font-size: 40px;
     color: white;text-align: center">
  宝<br>芝<br>林
</div>

$(function () {
    $("#box")
        .slideDown(1000)
        .click(function () {
            $(this).fadeOut(2000)
        })
})

二、遍历

1.js的遍历方式

for(var=0;i<10;i++){}

2.jquery的遍历方式

1.jquery对象.each(callback)

jquery对象.each(function(index,element){...})
  1. 参数介绍
    • index: 元素在集合中的索引
    • element: 集合中的每一个元素对象,dom对象
    • this: 集合中的每一个元素对象,dom对象
  2. 回调函数返回值
    • true: 如果当前function返回true,结束本次循环,继续下次循环(continue)
    • false: 如果当前function返回为false,则结束循环(break)
<p>p1</p>
<p>p2</p>
<p>p3</p>

$(function () {
    $("p").each(function (index, element) {
        if(index === 0)
            return true;

        console.log(index + ":" + element.innerText)

        if(index === 1)
            return false;
    })
})

2. $.each(jq选择器object, [callback]):(与第1种是等价的)

<p>p1</p>
<p>p2</p>
<p>p3</p>

$(function () {
    $.each($("p"), function (index, element) {
        console.log(index + ":" + element.innerText)
    })
})

3. for..of:for(元素对象 of 元素容器)

jquery3.0版本之后提供的方式

<p>p1</p>
<p>p2</p>
<p>p3</p>

$(function () {
    for(element of $("p")) {
        console.log(element.innerText)
    }
})

三、事件绑定

1.事件概念

事件流:dom树接受事件的顺序,“DOM2级事件”规定的事件流包括三个阶段

  • 事件捕获阶段
  • 目标阶段
  • 事件冒泡阶段

JQuery不支持事件的捕获,没有事件捕获的阶段

  1. 阻止事件默认事件与事件冒泡

阻止事件冒泡可以应用在模态框中:点击蒙版处取消模态框,而点击模态框则不会取消

$('a').click(function (ev) {
    // 阻止a标签的默认事件
    ev.preventDefault();

    // 阻止事件冒泡
    ev.stopPropagation();

    // 这句代码可以同时阻止默认行为和冒泡行为
    return false;
})

2. jquery标准的绑定方式

  1. jq对象.事件方法(回调函数);
    • 注意:如果调用事件方法,不传递回调函数,则会触发浏览器默认行为
    • 表单对象.submit():让表单提交
$("#input").focus() //让文本获取焦点

3. on绑定/代理事件;off解除绑定

  1. jq对象.on("事件名称", 回调函数):绑定事件

在事件之后添加的相应dom节点不能触发事件,事件代理能解决在事件绑定之后添加的新dom元素能触发相应的事件核心思想就是:【自己不能完成当前的事件 交给父级元素来做这件事情

  1. 父级jq对象.on('事件名字','子选择器','回调函数'):代理事件
$('ul').on('click','#new,.one',function () {
    console.log(this);
});

$('ul').append('<li id="new">新插入的</li>');
  1. delegate事件代理专业户
$("父选择器").delegate("子选择器", "事件", function() {...})
  1. jq对象.off("事件名称"):解除绑定
    • 注意:如果off方法不传递任何参数,则将组件上的所有事件全部解绑

4. 事件切换:toggle

  1. jq对象.toggle(fn1,fun2...):
    • 当单击jq对象对应的组件后,会执行fn1,第二次点击会执行fn2...

注意:1.9版本 .toggle() 方法删除,jQuery Migrate(迁移)插件可以恢复此功能。

 <script src="../js/jquery-migrate-1.0.0.js" type="text/javascript" charset="utf-8"></script>

5. bind 事件绑定方式

  1. jq对象.bind("事件类型 事件类型...", fn回调函数):给当前的dom元素绑定事件
$('选择器').bind('click mouseenter',function () {
    alert('事件被绑定了')
});

// ---------- //

function funOne(){};
finction funTwo(){};
$("选择器").bind({
    'click':funOne,
    'mouseover':funTwo
})
  1. unbind() 绑定事件的移除
$("选择器").unbind() // 移除所有事件
$("选择器").unbind('click') // 移除单击事件
  1. 【了解】绑定自定义事件
//绑定自定义的事件,接受的参数只能是一一对应,不能用一个变量接受一个数组。
$('button').bind('myClick',function(ev,a,b,c){
    alert(ev);
    alert(a + '' + b + c);
});

//触发自定义的事件用trigger ,可以给相应的事件传递参数
$('button').trigger('myClick',[1,2,3])

四、jq事件大杂烩

1.鼠标事件

鼠标事件 单击 双击 鼠标移入 鼠标移出 鼠标进入/离开 获取焦点 失去焦点等等

  1. 点击事件
$('#box').click(function () {
    console.log("单击事件");
});
  1. 双击事件(用的比较少) 一般点击和双击不回同时出现在同一个dom元素上
$('#box').dblclick(function () {
    console.log('双击事件');
}).delay(1000)
  1. 鼠标按下mousedown和弹起mouseup
$('#box').mousedown(function () {
    console.log('mousedown');
});
$('#box').mouseup(function () {
    console.log('mouseup');
});
  1. 键盘按下和键盘弹起
$('input[type=password]').keydown(function(){
    console.log($(this).val());
});
$('input[type=password]').keyup(function(){
    console.log($(this).val());
})
  1. 移入和移出mouseover mouseout 鼠标指针穿过/离开【被选元素】或者当前元素的【子元素】,会触发事件
$('#box').mouseover(function () {
    console.log('mouseover')
});
$('#box').mouseout(function () {
    console.log('mouseout')
});
  1. 进入和离开 mouseenter mouseleave 鼠标指针只在穿过/离开【被选元素】触发事件
$('#box').mouseenter(function () {
    console.log('mouseenter')
});
$('#box').mouseleave(function () {
    console.log('mouseleave')
})
  1. 鼠标移动的时候
$('#box').mousemove(function () {
    console.log('mousemove');
})
  1. 获取焦点用focus(jquery表单获取值用val,而不是value)
$('input[type=text]').focus(function () {
    console.log($(this).val());
});
  1. 失去焦点用blur
$('input[type=text]').blur(function () {
    console.log($(this).val());
});

2.表单事件

表单事件:change内容改变/selected选项被选中

  1. change() 表单元素发生改变时出发的事件

仅限于input textarea selected

$('select').change(function () {
    console.log($('select option:selected').text()); //选择被选中的选项
    $('.show').text($('select option:selected').text());
});
  1. select选中事件,

仅限于input type=text/textarea中

$("#other").select(function () {
    console.log($(this).val())
});
  1. submit
$('form').submit(function (ev) {
    //阻止默认事件的发生(点击submit属性的input会触发form的提交行为)
    ev.preventDefault();
})

五、插件【了解】

自定义一些方法功能,增强jquery

  1. $.fn.extend({...}): 增强通过jquery获取的对象的功能 $("#id")
<button id="checked">全选</button>
<button id="unchecked">全不选</button> <br>
<input type="checkbox"> <input type="checkbox">
<input type="checkbox"> <input type="checkbox">

$(function () {
    // 自定义函数功能
    $.fn.extend({
        choice: function () {
            // 这里的this是jquery对象
            this.prop("checked", true)
        },
        unchoice: function f() {
            this.prop("checked", false)
        }
    });

    $("#checked").click(function () {
        $("input").choice();
    })

    $("#unchecked").click(function () {
        $("input").unchoice();
    })
})
  1. $.extend({...}): 增强jquery对象自身的功能 $/JQuery
$(function () {
    $.extend({
        max: function (a, b) {
            return a > b ? a : b;
        },
        min: function (a, b) {
            return a < b ? a : b;
        }
    });

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

推荐阅读更多精彩内容

  • 一、 认识jQuery 1、 概述 之前,我们为了方便使用,封装了ajax.js,能够查找指定ID的DOM对象,使...
    宠辱不惊丶岁月静好阅读 638评论 0 3
  • JQ操作DOM属性节点相关方法(包含类的操作) 属性节点就是指dom元素的属性 一般如果是标签自身自带的属性,我们...
    Lins7阅读 436评论 0 0
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,334评论 0 2
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,169评论 0 1
  • 题目1: jQuery 能做什么? 选择网页元素改变结果集元素的操作:取值和赋值元素的操作:移动元素的操作:复制、...
    QQQQQCY阅读 187评论 0 1