jQuery--第二节--事件

jQuery API 中文文档 : http://jquery.cuishifeng.cn/
jQuery插件库 http://www.jq22.com/
1、事件

$(function () {

            // 给按钮绑定事件
            // 可以通过群组选择器选出多个元素,并且可以同时添加事件
            // 可以同时给元素绑定多个事件,只需要在on()的第一个参数的位置添加事件类型,中间使用空格分隔,即可
            // $('#btn1, #btn2').on('click mouseover mouseout', function (e) {
            //     // 使用on()方式绑定的事件的回调中,内部的this为触发该方法的原生DOM对象。
            //     // 如果需要使用,建议转为JQ元素,后续使用JQ方法
            //     var $this = $(this);
            //     // $this.html('button');
            //
            //     // 每次函数被调用,都会产生一个事件对象,就是函数的参数e,并且JQ已经出了兼容的问题
            //     // 通过e.type就可以获取事件类型
            //     console.log(e.type);
            //     console.log(e);
            // });

            // 移除事件
            // $('#btn1, #btn2').off('mouseover mouseout');

            // 绑定一次事件
            // $('#btn3').one('click', function () {
            //     console.log(this);
            // });

            // $('#btn1').on('click mouseover', function (e) {
            //     if (e.type == 'click') {
            //         console.log('click');
            //     } else if (e.type == 'mouseover') {
            //         console.log('mouseover');
            //     }
            // });

            // 如果给一个按钮绑定多个事情的时候,可以给on()方法传递一个对象,方法类型和对于的函数以键值对的方式传入
            // $('#btn1').on({
            //     'click': function () {
            //         console.log('click');
            //     },
            //     'mouseover': function () {
            //         console.log('mouseover');
            //     }
            // });


            // 简化事件的绑定
            $('#btn1').click(function () {
                console.log('click');
            });
            $('#btn2').mouseout(function () {
                console.log('dblclick');
            });
            $('select').change(function () {
                console.log(this.value);
            });

            // 浏览器大小发生改变
            $(window).resize(function () {
                console.log('fads');
            });
        });
html:
<body>

        <button id="btn1">按钮1</button>
        <button id="btn2">按钮2</button>
        <button id="btn3">按钮3</button>
        <input type="text" name="" value="">
        <select class="" name="">
            <option value="iPhone">iPhone</option>
            <option value="iPad">iPad</option>
        </select>

    </body>
    <script src="../js/jquery-2.2.3.js" charset="utf-8"></script>

二、事件代理

// 获取所有li
        // var lis = document.querySelectorAll('li');
        //
        // var click = function () {
        //     // 创建新li
        //     var newLi = document.createElement('li');
        //     newLi.innerHTML = this.innerHTML;
        //     newLi.onclick = click;
        //     // 拼接
        //     document.querySelector('ul').appendChild(newLi);
        // };
        //
        // // 给所有li绑定事件
        // for (var i = 0; i < lis.length; i++) {
        //     lis[i].onclick = click;
        // }


        // document.querySelector('ul').onclick = function (e) {
        //     if (e.target.tagName == 'LI') {
        //         var newLi = document.createElement('li');
        //         newLi.innerHTML = e.target.innerHTML;
        //         this.appendChild(newLi);
        //     }
        // };

        // 使用on()的方式可以快速的添加事件代理(委托)
        // 把事件绑定到父元素上面,on()第一个参数为事件类型,第二个参数为实际触发的对象,第三个参数为回调函数
        $('ul').on('click', 'li', function () {
            // 先将this转为JQ元素,然后克隆,然后拼接到ul最后面
            $(this).clone().appendTo('ul');
        });

三、事件代理的使用场景

$(function () {

            // 模拟网络请求,获取数据,并拼接到页面中
            setTimeout(function () {
                for (var i = 1; i <= 10; i++) {
                    $('<li>'+ i +'</li>').appendTo('#list');
                }
            }, 2000);

            // 此时,由于数据可能还没有获取下拉,所以给aili绑不了事件
            // $('li').on('click', function () {
            //     var text = $(this).html();
            //     alert(text);
            // });

            // 使用代理模式来解决数据暂时不存在的问题
            $('#list').on('click', 'li', function (e) {
                var text = $(this).html();
                alert(text);
                console.log(e);
            });

            $('a').on('click', function (e) {
                e.preventDefault();
                // e.stopPropagation();
                console.log('a');
            });

        });

四、动画
hide();
show();
toggle();

               slideUp()
               slideDown()
               slideToggle()

               fadeOut()
               fadeIn()
               fadeTo()
               fadeToggle()
// $('#btn').click(function () {
                // 自定义动画
                // $('.div1').animate({
                //     borderRadius: '0'
                // }, 1000, function () {
                //
                //     // 在animate()回调函数中去执行旋转的操作
                //     // 不能直接使用animate()方法了,因为这个不是支持所有的属性做动画
                //     // 可以使用css()方法去实现旋转等类似的效果,注意添加transition,才会有过渡效果
                //     $(this).css({
                //         'transition': 'all 1s',
                //         'transform': 'rotateZ(45deg)'
                //     });
                // });
                // 如果需要一些其它属性执行动画,而JQ没有提供,则可以使用animate()进行自行编写
                // 第一个参数为对象,为CSS相关的一些设置
                // 第二个参数为时间,单位毫秒
                // 第三个参数是完成后的回调函数
            // });
            
            // $('.div1').animate({
            //     width: 1000,
            //     height: 100
            // }, 3000, function () {
            //     console.log('done');
            // }).delay(500).animate({
            //     borderRadius: '50%'
            // }, 1000, function () {
            //     console.log('done2');
            // });

            $('.div1').animate({
                borderRadius: '50%'
            }, 1000).delay(1000).fadeOut();


            $('#btn').click(function () {
                // $('.div1').finish();
                // $('.div1').stop();
            });

            // finish() 将动画快速完成
            // stop() 将动画停止在当前位置
            // delay() 动画添加延迟

        });

五、ajax

$(function () {

            // 使用JQ提供的ajax方法进行网络请求
            // $.ajax({
            //     type: 'GET', // 声明请求类型 get
            //     url: 'http://h5.yztctech.net/api/axf/apihome.php', // 请求数据的地址
            //     data: { // 携带的参数
            //         a: 10,
            //         b: 20,
            //         c: 30
            //     },
            //     dataType: 'json', // 声明返回值类型
            //     success: function (data) { // 数据请求成功的回调
            //         console.log(data);
            //     },
            //     error: function (err) { // 失败的回调
            //         console.log(err);
            //     }
            // });


            // 如果是GET请求的数据,建议使用$.get(), 也是最常见的接口
            // $.get('http://h5.yztctech.net/api/axf/apihome.php', function (data) {
            //     console.log(data);
            // }, 'json');

            // 如果是POST请求的数据,建议使用$.post()
            // $.post('http://h5.yztctech.net/api/axf/apihome.php', function (data) {
            //     console.log(data);
            // }, 'json');

            // 如果是JSONP跨域数据,建议使用$.getJSON()
            // $.getJSON('http://h5.yztctech.net/api/axf/apihome.php', function (data) {
            //     console.log(data);
            // });
        });

加载其它页面的结构到本页面的结构中

$(function () {
            $('.footer').load('./footer.html');

 });

六、插件

<body>

        <h1>我是一级标题</h1>
        <h2>我是二级标题</h2>
        <h3>我是三级标题</h3>
        <h4>我比他们小</h4>

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

        $(function () {

            // 给JQ元素添加一个方法,打印本身
            $.fn.extend({
                log: function () {
                    console.log(this);
                    return this;
                },
                addStyle: function () {
                    this.css({
                        color: 'yellow',
                        backgroundColor: '#333',
                        border: '3px solid blue'
                    });
                    return this;
                }
            });

            $('h1').css({
                color: 'yellow',
                backgroundColor: '#333',
                border: '3px solid blue'
            });
            $('h2').addStyle();
            $('h4').addStyle();
            // 使用 $.fn.extend() 可以给JQ元素添加方法啊,就是所谓的插件。
            // 使用JQ选择器选出元素之后,可以直接调用log()方法,由于在log()方法内部返回了this,所以可以使用链式语法继续在后面编写代码
            $('h3').log().css('backgroundColor', 'green');
            $.extend({
                sum: function (a, b) {
                    return a + b;
                }
            });
            console.log($.sum(10, 20));
        });

七、 使用插件机制添加slideLeft方法

$(function () {
            $.fn.extend({
                slideLeft: function (time, fn) {
                    var s = 0.5;
                    if (time) {
                        s = time / 1000;
                    }

                    this.css({
                        transition: 'all '+ s +'s linear',
                        width: 0
                    });

                    setTimeout(function () {
                        fn && fn()
                    }, time);

                    return this;
                }
            });

            $('#btn').click(function () {

                $('.div1').slideLeft(2222);

                // $('.div1').slideUp(3000, function () {
                //     console.log('done');
                // });

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

推荐阅读更多精彩内容

  • 原文链接 http://blog.poetries.top/2016/10/20/review-jQuery 关注...
    程序员poetry阅读 16,634评论 18 503
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,157评论 0 1
  • 1.JQuery 基础 改变web开发人员创造搞交互性界面的方式。设计者无需花费时间纠缠JS复杂的高级特性。 1....
    LaBaby_阅读 1,321评论 0 2
  • 忘记听哪个家伙讲的,又或者是上网有意无意看别人推荐的,这个叫侯励的家伙趁家中没有人连夜看完了《桃花期》。还未等他回...
    恕我能阅读 379评论 0 1
  • 今天我想记录下心的声音,有你的心声,也有我的心声…… 蒋勋老师说:美就是回来做自己,充分活出自己! 我对自己说...
    自由的花园阅读 265评论 1 0