前端基础知识

jQuery--第二节--事件

2017-05-03  本文已影响0人  LorenaLu

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

            });
        });
上一篇下一篇

猜你喜欢

热点阅读