zoukankan      html  css  js  c++  java
  • day82-jQuery-事件、动画、each、data、插件

    1. 事件
        常用事件:
        click(function(){...})
        hover(function(){...})
        blur(function(){...})
        focus(function(){...})
        change(function(){...})
        keydown(function(){...})
        keyup(function(){...})
    
        1.1 我们今后要用的jQuery绑定事件的方式
            1.1.1 点击的标签对象.on("click", function(){...})
                
            1.1.2 父对象.on("click", "点击的标签对象的id、classname、tagname等等", function(){...})
                优点:
                1.适用于 给未来的元素(页面生成的时候还没有的标签) 绑定事件 (事件委托),
                    子元素无法处理的,委托给父元素处理。            
                2.事件冒泡
                    子元素无法处理的,委托给父元素处理,父元素无法处理的,委托给爷爷元素处理。
                    把事件向上级汇报处理。    
                3.事件捕获
                    利用事件冒泡,给已经存在的标签绑定事件,用来捕获后代标签的事件.
                
            示例:新增一行,并且可以删除这一行。
                $("table").on("click", ".delete", function () {
                                  // 删除按钮绑定的事件
                                })
    
        1.2 hover事件示例:
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="x-ua-compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <title>hover事件</title>
        <style>
            * {
                margin: 0;
                padding: 0;
            }
    
            .nav {
                height: 40px;
                width: 100%;
                background-color: #3d3d3d;
                position: fixed;
                top: 0;
            }
    
            .nav ul {
                list-style-type: none;
                line-height: 40px;
            }
    
            .nav li {
                float: left;
                padding: 0 10px;
                color: #999999;
                position: relative;
            }
    
            .nav li:hover {
                background-color: red;
                color: white;
            }
    
            .clearfix:after {
                content: "";
                display: block;
                clear: both;
            }
    
            .son {
                position: absolute;
                top: 40px;
                right: 0;
                height: 50px;
                width: 100px;
                background-color: #00a9ff;
                display: none;
            }
    
            .hover .son{
                display: block;
            }
        </style>
    </head>
    <body>
    <div class="nav">
        <ul class="clearfix">
            <li>登录</li>
            <li>注册</li>
            <li>购物车
                <p class="son">
                    空空如也...
                </p>
            </li>
        </ul>
    </div>
    <script src="jquery-3.4.1.min.js"></script>
    <script>
        $(".nav li").hover(
            function () {
                $(this).addClass("hover");
            },//两函数使用逗号隔开
            function () {
                $(this).removeClass("hover");
            }
        );
    </script>
    </body>
    </html>
    
        1.3 阻止后续事件执行
            return false; // 常见阻止表单提交等
    
        1.4 移除事件
            .off("click", function(){...})
    
        1.5 页面载入
            当DOM载入就绪可以查询及操纵时绑定一个要执行的函数。
            这是事件模块中最重要的一个函数,因为它可以极大地提高web应用程序的响应速度。
          两种写法:
              $(document).ready(function(){
                                // 在这里写你的JS代码...
                                })
          简写:
              $(function(){
                      // 你在这里写你的代码
                      })
        示例:
    <body> <script> function foo() { // 在这里写你的JS代码... } // 文档树就绪后执行 $(document).ready( function () { foo(); } ); </script> </body> 2. 动画效果 // 基本 show([s,[e],[fn]]) hide([s,[e],[fn]]) toggle([s],[e],[fn]) // 滑动 slideDown([s],[e],[fn]) slideUp([s,[e],[fn]]) slideToggle([s],[e],[fn]) // 淡入淡出 fadeIn([s],[e],[fn]) fadeOut([s],[e],[fn]) fadeTo([[s],o,[e],[fn]]) // o是opacity透明度 fadeToggle([s,[e],[fn]]) // 自定义(了解即可) animate(p,[s],[e],[fn]) 2.1 基本示例:图片展示和隐藏 <img src="1.jpg" alt=""> $('img').show(5000); //图片在5秒内从小到大展示完成 $('img').hide(5000); //图片在5秒内从打到小隐藏完成 $('img').toggle(5000); //图片在5秒内,有图片就隐藏,没有图片就展示出来 2.2 滑动示例:菜单隐藏 <div>菜单一</div> <div> <ul> <li>111</li> <li>222</li> <li>333</li> </ul> </div> $('ul').slideUp(1000); //向上滑动隐藏 $('ul').slideDown(1000); //向下滑动展示 $('ul').slideToggle(1000); //展示变隐藏,隐藏变展示 2.3 淡入淡出:图片展示和隐藏 <img src="1.jpg" alt=""> $('img').fadeIn(5000); //图片在5秒内淡入展示 $('img').fadeOut(5000); //图片在5秒内淡出隐藏 $('img').fadeToggle(5000); //图片在5秒内,有图片就淡出,没有图片就淡入 $('img').fadeTo(3000,0.3); //图片在3秒内,透明度变为0.3 2.4 自定义 示例:点赞特效。有个问题,每次点击都增加一个i标签。 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>点赞动画示例</title> <style> div { position: relative; display: inline-block; } div>i { display: inline-block; color: red; position: absolute; right: -16px; top: -5px; opacity: 1; } </style> </head> <body> <div id="d1">点赞</div> <script src="jquery-3.2.1.min.js"></script> <script> $("#d1").on("click", function () { var newI = document.createElement("i"); newI.innerText = "+1"; $(this).append(newI); $(this).children("i").animate({ opacity: 0 }, 1000) }) </script> </body> </html> 3. each循环 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <div>001</div> <div>002</div> <div>003</div> <div>004</div> <div>005</div> <script src="jquery-3.4.1.min.js"></script> <script> var $divEles = $('div'); for (var i = 0; i < $divEles.length; i++) { console.log($divEles[i].innerText) } //上下两个循环结果一样
        //jquery对象的循环
    $divEles.each(function () { //each是指$divEles对象的每一个元素 console.log($(this).text()); //$(this)就是$divEles,写一个this语句就行 });
        //数组的循环
    var a1 = [11,22,33,44,55]; $.each(a1,function (index,value) { if(value===22){return false}//断开each循环 console.log(index+':'+value); }); //0:11 $.each(a1,function (index,value) { if(value===22){return}//退出当前这一次循环 console.log(index+':'+value); }); //0:11 //2:33 //3:44 //4:55

        //对象的循环
      var dict = {'name':'tom','age':18};
      $.each(dict,function(key,value){
           console.log(key,value)
        })
    </script> </body> </html> 4. data:最重要的用法是:保存点击过的jQuery对象,方便后面找到它使用。详见示例:表格、新增、编辑、删除、each、data、事件委托 jQuery对象可以存放 数字、字符串和jQuery对象 示例: <div id="d1">迈腾2020</div> <img src="1.jpg" alt=""> 4.1 数字: $('#d1').data('age',18); $('#d1').data('age'); //结果是18 4.2 字符串: $('#d1').data('name','maiteng'); $('#d1').data('name'); //'maiteng' 4.3 jQuery对象 var $imgEle = $('img'); $('#d1').data('img',$imgEle); //找到一个对象$('#d1')(任意jQuery对象都可以),保存jQuery对象$imgEle。 $('#d1').data('img'); //获取$imgEle对象 $('#d1').data('img').attr('src','4.jpg') //属性修改

      4.4 data传参
        
    <div data-name="tom" data-age="18"></div>  //把键值对{‘name’:"tom",‘age’:18}保存在div标签里面。
        <button id="btn">获取数据</button>
        <button id="btn1">设置数据</button>

        
    $(function () {
                   $('#btn').on('click',function () {
          // 获取数据
                console.log($('div').data('name'));  //tom
                console.log($('div').data('age'));  //18
                 });

            $('#btn1').on('click',function () {
          // 设置数据
                $('div').data('name','marry');
                $('div').data('age','20');
                       //$('div').data({'name':'marry','age':'20'});可以使用键值对设置,更加方便
                         });
              });
    
    5. 插件:自定义新函数jQuery.extend({键值对});
        
        示例:
            <script>
            jQuery.extend({
                  min: function(a, b){return a < b ? a : b;},    // {}里面是键值对
                  max: function(a, b){return a > b ? a : b;}
                });
            jQuery.min(2,3);    // => 2
            jQuery.max(4,5);    // => 5
            </script>
    -----------------------------------------------------------------------------------------------------
    示例:表格、新增、编辑、删除、each、data、事件委托
    <!DOCTYPE html>
    <html lang="zh-CN">
    <head>
        <meta charset="UTF-8">
        <title>表格</title>
        <style>
            th,td {
                text-align: center;
            }
            .cover{
                background-color:rgba(0,0,0,0.4);
                position:fixed;
                top:0;
                right:0;
                bottom:0;
                left:0;
            }
            .modal-new,.modal-modify{
                background-color:white;
                width:300px;
                height:200px;
                position:fixed;
                top:50%;
                left:50%;
                margin-top:-100px;
                margin-left:-150px;
    
            }
            .hide{display:none;}
        </style>
    </head>
    <body>
    <table border="1">
        <thead>
        <tr>
            <th>序号</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>操作</th>
        </tr>
        </thead>
        <tbody>
        <tr>
            <td>1</td>
            <td>tom</td>
            <td>18</td>
            <td>
                <input type="button" value="编辑" class="modify"> <input type="button" value="删除" class="cancel">
            </td>
        </tr>
        <tr>
            <td>2</td>
            <td>marry</td>
            <td>20</td>
            <td>
                <input type="button" value="编辑" class="modify"> <input type="button" value="删除" class="cancel">
            </td>
        </tr>
        <tr>
            <td>3</td>
            <td>alex</td>
            <td>38</td>
            <td>
                <input type="button" value="编辑" class="modify"> <input type="button" value="删除" class="cancel">
            </td>
        </tr>
        </tbody>
    </table>
    <input type="button" id="new" value="新增">
    <div class="cover hide"></div>
    <form class="modal-new hide" action="">
        <p>新增数据</p>
        <p>
            <label for="newName">姓名</label>
            <input type="text" id="newName">
        </p>
        <p>
            <label for="newAge">年龄</label>
            <input type="text" id="newAge">
        </p>
        <p>
            <input type="button" value="确定" id="newSure">
            <input type="button" value="退出" id="newExit">
        </p>
    </form>
    <form class="modal-modify hide" action="">
        <p>修改数据</p>
        <p>
            <label for="modifyName">姓名</label>
            <input type="text" id="modifyName">
        </p>
        <p>
            <label for="modifyAge">年龄</label>
            <input type="text" id="modifyAge">
        </p>
        <p>
            <input type="button" value="确定" id="modifySure">
            <input type="button" value="退出" id="modifyExit">
        </p>
    </form>
    
    <script src="jquery-3.4.1.min.js"></script>
    <script>
        //把经常使用的对象存放在变量里面。
        var $tbodyEles = $('tbody');
    //------------------新增开始---------------------------------
        //1.新增一行
            //1.1 点击新增,弹出模态框:cover和modal-new
        $('#new').on('click',function () {
            $('.cover,.modal-new').removeClass('hide');
            //1.2 创建tr和td标签。
            var trEles = document.createElement('tr');
            $(trEles).html('<td></td>'+'<td></td>'+'<td></td>'+'<td><input type="button" value="编辑" class="modify"> <input type="button" value="删除" class="cancel"></td>');
            $tbodyEles.append(trEles);
            //1.3 第一个td标签添加序号。
                //1.3.1 先找到tbody有多少个tr,tr的个数就是序号。
            var num = $('tbody tr').length;
            $(trEles).children().first().text(num);
        });
    
        //2.点新增弹出来的模态框的确定,获取姓名和年龄的值,赋予新创建的td。
        $('#newSure').on('click',function () {
            $tbodyEles.children().last().children().eq(1).text($('#newName').val());
            $tbodyEles.children().last().children().eq(2).text($('#newAge').val());
        });
    
        //3.点新增弹出来的模态框的退出,就清空姓名和年龄的值,然后隐藏模态框
        $('#newExit').on('click',function () {
            $('#newName').val('');
            $('#newAge').val('');
            $('.cover,.modal-new').addClass('hide');
        });
    //------------------新增结束---------------------------------
    
    //------------------编辑开始---------------------------------
        //4.点编辑,要使用事件委托来绑定事件
        //4.1弹出模态框:cover和modal-modify
        $tbodyEles.on('click','.modify',function () {
            $('.cover,.modal-modify').removeClass('hide');
        //4.2把当前编辑的jQuery对象$modify保存到tbody标签里面,方便后面使用。
            var $modify = $(this);//this是当前点击的DOM对象,$(this)是jQuery对象
            $tbodyEles.data('currentModify',$modify);
        //4.3获取表格里面姓名和年龄的值,填写到表单的姓名和年龄里面去。
            var name = $modify.parent().parent().children().eq(1).text();
            var age = $modify.parent().parent().children().eq(2).text();
            $('#modifyName').val(name);
            $('#modifyAge').val(age);
        });
    
        //5.点编辑弹出来的表单modal-modify,修改了姓名和年龄之后,按确定,
        //触发事件:把姓名和年龄的值,赋予跟当前编辑同一行的姓名和年龄。
        //$tbodyEles.data('currentModify')就是上面保存的当前编辑的jQuery对象$modify。
        $('#modifySure').on('click',function () {
            var mName = $('#modifyName').val();
            var mAge = $('#modifyAge').val();
            $tbodyEles.data('currentModify').parent().parent().children().eq(1).text(mName);
            $tbodyEles.data('currentModify').parent().parent().children().eq(2).text(mAge);
        });
    
        //6.点编辑弹出来的模态框的退出,就清空姓名和年龄的值,然后隐藏模态框
        $('#modifyExit').on('click',function () {
            $('#modifyName').val('');
            $('#modifyAge').val('');
            $('.cover,.modal-modify').addClass('hide');
        });
    //------------------编辑结束---------------------------------
    
    //------------------删除开始---------------------------------
    
        //7.删除一行,要用事件委托
        $tbodyEles.on('click','.cancel',function () {
        //7.1 先找到当前行的tr对象
            var $TrEles = $(this).parent().parent();
        //7.2 当前行的tr对象后面所有的tr的序号都要减一,
            // 当前行下面的所有对象$TrEles.nextAll()进行each循环,
        //$(this)就是$TrEles.nextAll(),而each会对$(this)的每一个对象循环。
            $TrEles.nextAll().each(function () {
                //each先找到第一个文本,然后减一,接着再找下一个
                var trNum = $(this).children().first().text();
                $(this).children().first().text(trNum-1);
    
            });
        //使用for循环也可以:
        //      for(var i = 0 ; i<$TrEles.nextAll().length; i++){
        //     var trNum1 = $($TrEles.nextAll()[i]).children().first().text();
        //     $($TrEles.nextAll()[i]).children().first().text(trNum1-1);
        // }
        //7.3 删除当前行,要最后进行,如果放在前面删除了,就无法找到当前对象了。
            $TrEles.remove();
        });
    //------------------删除结束---------------------------------
    
    </script>
    </body>
    </html>
        
  • 相关阅读:
    双写一致性的讨论
    webstorm设置新建vue文件的模板
    java基础类及方法
    中国大学零基础学Java语言练习题
    java基础继承
    java基础接口、继承、多态
    Windows、Mac 命令行启动程序(为了查看Electron打包后主进程日志)
    【Typescirpt】定义数字范围类型
    MRP
    Raid 学习
  • 原文地址:https://www.cnblogs.com/python-daxiong/p/12490937.html
Copyright © 2011-2022 走看看