1.jQuery动画

1.1 jQuery显示与隐藏效果

1⃣️show([speed,[easing],[fn]])

2⃣️hide([speed,[easing],[fn]])

3⃣️toggle([speed,[easing],[fn]])

  • 参数都可以省略,无动画直接显示。
  • speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
  • easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
  • fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
        
            div{
                width: 300px;
                height: 500px;
                background:pink;
                display: none;
            }

            <button>显示</button>
            <button>隐藏</button>
            <button>切换</button>
            <div></div>
           
           $('button').eq(0).click(function(){
              $('div').show(1000,function(){
                alert(1)
               })
            })
           $('button').eq(1).click(function(){
               $('div').hide(1000)
           })
           $('button').eq(2).click(function(){
               $('div').toggle(1000)
           })
           //一般情况下不给参数
        
    

1.2 jQuery滑动效果及切换hover

1⃣️slideDown([speed,[easing],[fn]])

2⃣️slideUp([speed,[easing],[fn]])

3⃣️slideToggle([speed,[easing],[fn]])

  • 参数都可以省略,无动画直接显示。
  • speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
  • easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
  • fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
        
            div{
                width: 300px;
                height: 500px;
                background:pink;
                display: none;
            }

            <button>下拉滑动</button>
            <button>上拉滑动</button>
            <button>切换滑动</button>
            <div></div>
           
           $('button').eq(0).click(function(){
              $('div').slideDown(1000,function(){
                alert(1)
               })
            })
           $('button').eq(1).click(function(){
               $('div').slideUp(1000)
           })
           $('button').eq(2).click(function(){
               $('div').slideToggle(1000)
           })
           //一般情况下不给参数
        
    

4⃣️事件切换 hover 就是鼠标经过和离开的复合写法

    
        $('.nav li').hover(function(){
            $(this).children('ul').slideDown(200);
        },function(){
            $(this).children('ul').slideUp(200);
        })
    

5⃣️事件切换 hover 如果只写一个函数,那么鼠标和离开都会触发这个函数

    
        $('.nav li').hover(function(){
            $(this).children('ul').slideToggle(200);
        })
    

1.3 动画队列及其停止排队方法

1⃣️动画或效果队列

动画或效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。

    
        //stop 必须写在动画的前面
        $('.nav li').hover(function(){
            $(this).children('ul').stop().slideToggle(200);
        })
    

1.4 jQuery淡入淡出

1⃣️fadeIn([speed,[easing],[fn]])

2⃣️fadeOut([speed,[easing],[fn]])

3⃣️fadeToggle([speed,[easing],[fn]])

//修改透明度

4⃣️fadeTo([speed],opacity,[easing],[fn]])

  • 参数都可以省略,无动画直接显示。
  • speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
  • easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
  • fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
  • opacity:透明度必须写,取值0~1之间;
    speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
        
            div{
                width: 300px;
                height: 500px;
                background:pink;
                display: none;
            }

            <button>淡入效果</button>
            <button>淡出效果</button>
            <button>淡入淡出切换</button>
            <button>修改透明度</button>
            <div></div>
           
           $('button').eq(0).click(function(){
              $('div').fadeIn(1000,function(){
                alert(1);
               })
            })
           $('button').eq(1).click(function(){
               $('div').fadeOut(1000);
           })
           $('button').eq(2).click(function(){
               $('div').fadeToggle(1000);
           })
           $('button').eq(3).click(function(){
            //透明度和速度必须写;
            $('div').fadeTo(1000,0.5);
        })
           //一般情况下不给参数
        
    

1.5 jQuery自定义动画

1⃣️animate(params,[speed,[easing],[fn]])

  • params: 想要更改的样式属性,以对象形式传递,必须写。属性名可以不用带引号,
  • speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
  • easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
  • fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
    
            div{
                width: 200px;
                height: 200px;
                background:pink;
                position: absolute;
            }
            <button>动起来</button>
            <div></div>
            
                $('button').click(function(){
                    $('div').animate({
                       left:200,
                       top:300,
                       opacity:0.4,
                       width:500
                    },500)
                })

    

2.jQuery实现购物车案例

2.1 jQuery属性操作

1⃣️设置或获取元素固有属性值prop()

所谓元素固有属性就是元素本身自带的属性,比如<a>元素里面的href,比如<input>元素里面的type。

    
        <a href='http://www.aa.cn' title='good'></a>
        <div index=1></div>
        <span data-index=1>123</span>
        //1.element.prop('属性名') 获取元素固有的属性值
        //获取元素固有属性值
        ($('a').prop('href'));
        //设置元素固有属性值
        ($('a').prop('href','http://www.bb.cn'));

        //2.元素的自定义属性,我们通过attr()
        //获取元素自定义属性值
        ($('div').attr('index'));
        //设置元素自定义属性值
        ($('div').attr('index','4');

        //3.数据缓存 data() 这个里面的数据是存放在元素的内存里
        //设置元素内存属性值
        $('span').data('uname','andy');
        //获取元素内存属性值
        $('span').data('uname');
        //这个方法获取data-index h5 自定义属性 第一个 不用写data- 而且返回的是数字型
        $('span').data('index');

    

2.2 购物车模块-全选

全选 全不选功能

        
           $(function(){
               //就是把全选按钮(checkall)的状态赋值给 三个小的按钮(j-checkbox)就可以了
               //事件可以用change
               $(.checkall).change(function(){
                   //console.log($(this).prop('checked'));
                   $(".j-checkbox,.checkall").prop("checked",$(this).prop("checked"));
               })

               //如果小复选框被选中的个数等于3(随长度而来) 就应该把全选按钮选上,否则全选按钮不选
               $('.j-checkbox').change(function(){
                   if($('j-checkbox:checked').length===$('j-checkbox').length){
                       $('.checkall').prop('checked',true);
                   }else{
                       $('.checkall').prop('checked',false);
                   }
               })
           })
    
        
    

2.3 jQuery内容文本值

1⃣️普通元素内容 html() (相当于原生innerHTML)

        
          html( )   //获取元素的内容
html('内容') //设置元素的内容

2⃣️普通元素文本内容 text() (相当于原生innerText)

        
          text( )   //获取元素的内容
text('内容') //设置元素的内容

3⃣️普通元素表单值 val() (相当于原生value)

        
          val( )   //获取元素的内容
val('内容') //设置元素的内容

2.4 购物车模块-增减商品数量

        
           $(function(){
               //增减商品数量,模块 首先声明一个变量,当我们点击+号increment,就让这个值++,然后赋值给文本框
               $('.increment').click(function(){
                   //得到当前兄弟文本框的值
                   var n =$(this).siblings('.itext').val();
                   n++;
                   $(this).siblings('.itext').val(n);

               })

               $('.decrement').click(function(){
                   //得到当前兄弟文本框的值
                   var n =$(this).siblings('.itext').val();
                   if(n==1){
                     return false;
                   }
                  n--;
                   $(this).siblings('.itext').val(n);

              })
               
           })
    
        

2.5 购物车模块-修改商品小计(价格)

toFixed(2) 保留两位小数

        
                $(function(){
                    //增减商品数量,模块 首先声明一个变量,当我们点击+号increment,就让这个值++,然后赋值给文本框
                    $('.increment').click(function(){
                        //得到当前兄弟文本框的值
                        var n =$(this).siblings('.itext').val();
                        n++;
                        $(this).siblings('.itext').val(n);

                        //计算小计模块,根据文本框的值 乘以 当前商品的价格 就是商品的小计
                        //当前商品的价格
                        var p =$(this).parent().parent().siblings('.p-price').html();
                        //截取掉人民币符号¥
                        p = p.substr(1);
                        //小计模块
                        $(this).parent().parent().siblings('.p-sum').html('¥'+(p*n).toFixed(2));
     
                    })
     
                    $('.decrement').click(function(){
                        //得到当前兄弟文本框的值
                        var n =$(this).siblings('.itext').val();
                        if(n==1){
                          return false;
                        }
                        n--;
                        $(this).siblings('.itext').val(n);
                        //计算小计模块,根据文本框的值 乘以 当前商品的价格 就是商品的小计
                        //当前商品的价格
                        var p =$(this).parent().parent().siblings('.p-price').html();
                        //截取掉人民币符号¥
                        p = p.substr(1);
                        //小计模块
                        $(this).parent().parent().siblings('.p-sum').html('¥'+p*n).toFixed(2));;
     
                   })
                    
                })
    
        

2.6 用户修改文本框的值计算 小计模块

        
                $(function(){
                    $('.itxt').change(function(){
                        //先得到文本框里面的值,乘以 当前商品的单价
                        var n = $(this).val
                        //当前商品的价格
                        var p =$(this).parents('.p-num').siblings('.p-price').html();
                        //截取掉人民币符号¥
                        p = p.substr(1);
                        $(this).parent().parents('.p-num').siblings('.p-sum').html('¥'+(p*n).toFixed(2));
                    })

                })
    
        

2.7 购物车模块-计算总件数和总额

        
                $(function(){
                   function getSum(){
                       var count=0;//计算总件数
                       var money=0;//计算总价钱
                       $('.itxt').each(function(i,ele){
                           count +=parseInt($(ele).val());
                       })
                       $('.amount-sum em').text(count);
                       $('.p-sum').each(function(i,ele){
                           money +=parseFloat($(ele).text().substr(1));
                       })
                       $('.price-sum em').text('¥'+money.toFixed(2));
                   }
                    
                })
    
        

2.8 创建,添加,删除元素

        
              //1.创建元素
              var li = $('<li>我是后来创建的li</li>');
              //2.添加元素
              //a.内部添加
              $('ul').append(li);//内部添加并且放到内容的最后面
              $('ul').prepend(li);//内部添加并且放到内容的最前面
              
              //b.外部添加
              var div = $('<div>我是后面创建的li</div>')
              $('.test').after(div)
              $('.test').before(div)

              //c.删除元素
              $('ul').remove();//可以删除匹配的元素,自杀
              $('ul').empty();//可以删除匹配的元素里面的子节点 孩子
              $('ul').html('');//可以删除匹配的元素里面的子节点 孩子
        

2.9 jQuery尺寸方法

        
              //1.取得匹配元素宽度和高度值 只算 width / height
              width( ) /height( )

              //2.取得匹配元素宽度和高度值 包含padding
              innerWidth( ) /innerHeight( )
              
              //3.取得匹配元素宽度和高度值 包含padding,border
              outerWidth( ) /outerHeight( )

              //4.取得匹配元素宽度和高度值 包含padding,border,margin
              outerWidth( true ) /outerHeight( true )

              

a .以上参数为空,则是获取相应值,返回的是数字型

b .如果参数为数字,则是修改相应值

c .参数可以不必写单位

2.10 jQuery位置方法

        
              //1.offset( ) 设置或获取元素偏移
              1⃣️offset( ) 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系;
              2⃣️该方法有两个属性left,top.
               offset( ).top 用于获取距离文档顶部的距离,
               offset( ).left 用于获取距离文档左侧的距离, 
              3⃣️可以设置元素的偏移: offset({top:10,left:30});
              
              //2.获取距离带有定位父级位置(偏移) position 如果没有带有定位的父级,则以文档为准
              //这个方法只能获取不能设置偏移
              $('.son').position({
                  top:200,
                  left:200
              })

              //3.scrollTop( )/scrollLeft( ) 设置或获取元素被卷去的头部和左侧
              1⃣️scrollTop( )方法设置或返回被选元素被卷去的头部

              $(function( ){
                  //被卷去的头部 scrollTop( ) /被卷去的左侧 scrollLeft( )
                  //页面滚动事件
                  $(window).scroll(function(){
                    var boxTop = $('.container').offset( ).top;
                    if($(document).scrollTop( )>=boxTop){
                        $('.back').fadeIn();
                    }else{
                        $('.back').fadeOut(); 
                    };

                  })
              })
           
        

2.11 带有动画的返回顶部

        
              1⃣️.核心原理:使用animate 动画返回顶部
              2⃣️.animate 动画函数里面有个scrollTop 属性,可以设置位置
              3⃣️.但是是元素做动画,因此$('body,html').animate({scrollTop:0})

              $('.back').click(function(){
                $('body,html').animate({
                    scrollTop:0
                    })
              })
              
        

3.jQuery实现电梯导航案例

3.1 显示隐藏电梯导航

当我们滚动到某指定模块时,就让电梯导航显示出来

        
            $(function(){
                var toolTop = $('.recomend').offset().top;
                $(window).scroll(function(){
                    if($(document).scrollTop()>=toolTop){
                        $('.fixedtool').fadeIn();
                    }else{
                     $('.fixedtool').fadeOut();
                    }
                })
            })
        
    

3.2 点击滚动目标位置

点击电梯导航页面可以滚动到相应内容区域

核心算法:导航和内容一一对应

        
            $(function(){
               $('.fixedtool li').click(function(){
                   console.log($(this).index());
                   //当我们每次点击小li 就需要计算出页面要去往的位置
                   //选出对应索引号的内容区的盒子,计算它的.offset().top
                   var current = $('.floor .w').eq($(this).index()).offset().top;
                   //页面动画滚动效果
                   $("body,html").stop().animate({
                       scrollTop:current;
                   }
               })
            })
        
    

3.3 点击当前li添加current类

        
            $(function(){
                var toolTop = $('.recomend').offset().top;
                toggleTool()

                //封装显示隐藏的函数
                function toggleTool(){
                    if($(document).scrollTop()>=toolTop){
                        $('.fixedtool').fadeIn();
                    }else{
                     $('.fixedtool').fadeOut();
                    }
                }

                $(window).scroll(function(){
                    toggleTool()
                })
               $('.fixedtool li').click(function(){
                   console.log($(this).index());
                   //当我们每次点击小li 就需要计算出页面要去往的位置
                   //选出对应索引号的内容区的盒子,计算它的.offset().top
                   var current = $('.floor .w').eq($(this).index()).offset().top;
                   //页面动画滚动效果
                   $("body,html").stop().animate({
                       scrollTop:current;
                   });
                   //点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
                   $(this).addClass('current').siblings().removeClass()
               })
            })
        
    

3.4 滑动页面电梯导航自动添加current类

        
            $(function(){
                var toolTop = $('.recomend').offset().top;
                toggleTool()

                //封装显示隐藏的函数
                function toggleTool(){
                    if($(document).scrollTop()>=toolTop){
                        $('.fixedtool').fadeIn();
                    }else{
                     $('.fixedtool').fadeOut();
                    }
                }

                $(window).scroll(function(){
                    toggleTool();
                    //当页面滚动到某个内容区域,左侧电梯导航小li 相应添加和删除 current类名
                    $('.floor .w').each(function(i,ele){
                        if($(document).scrollTop()>=$(ele).offset().top){
                            console.log(i)
                            $('.fixedtool li').eq(i).addClass("current").siblings().removeClass("current");
                        }
                    })
                })
               $('.fixedtool li').click(function(){
                   console.log($(this).index());
                   //当我们每次点击小li 就需要计算出页面要去往的位置
                   //选出对应索引号的内容区的盒子,计算它的.offset().top
                   var current = $('.floor .w').eq($(this).index()).offset().top;
                   //页面动画滚动效果
                   $("body,html").stop().animate({
                       scrollTop:current;
                   });
                   //点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
                   $(this).addClass('current').siblings().removeClass()
               })
            })
        
    

3.5 节流阀(互斥锁)(修复)

        
            $(function(){
                //当我们点击了小 li 此时不需要执行页面滚动事件里面的li 的背景选择 添加current
                //节流阀 互斥锁
                var flag =true;
                //1.显示隐藏电梯导航
                var toolTop = $('.recomend').offset().top;
                toggleTool()

                //封装显示隐藏的函数
                function toggleTool(){
                    if($(document).scrollTop()>=toolTop){
                        $('.fixedtool').fadeIn();
                    }else{
                     $('.fixedtool').fadeOut();
                    }
                }

                $(window).scroll(function(){
                    toggleTool();
                    //3.当页面滚动到某个内容区域,左侧电梯导航小li 相应添加和删除 current类名
                    if(flag){
                        $('.floor .w').each(function(i,ele){
                            if($(document).scrollTop()>=$(ele).offset().top){
                                console.log(i)
                                $('.fixedtool li').eq(i).addClass("current").siblings().removeClass("current");
                            }
                        })
                    }
                })

                //2.当我们每次点击小li 就需要计算出页面要去往的位置
               $('.fixedtool li').click(function(){
                   flag=false;
                   console.log($(this).index());
                   
                   //选出对应索引号的内容区的盒子,计算它的.offset().top
                   var current = $('.floor .w').eq($(this).index()).offset().top;
                   //页面动画滚动效果
                   $("body,html").stop().animate({
                       scrollTop:current;
                   },function(){
                       flag=true;
                   });
                   //点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
                   $(this).addClass('current').siblings().removeClass()
               })
            })
        
    

4.jQuery事件绑定和解绑

4.1 事件处理on() 绑定事件

优势:a . on() 方法在匹配元素上绑定一个或多个事件的事件处理函数
    
        $('div').on({
            mouseenter:function(){
                $(this).css('background','skyblue');
            },
            click:function(){
                $(this).css('background','pink');
            }
        })

        $('div').on('mouseenter,mouseleave',function(){
            $(this).toggleClass('current');
        })

    
优势:b . on() 方法可以事件委派操作,事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委托给父元素;
        
        $('ul').on('click','li',function(){
            alert('tangtang')
        })
    
        
优势:c . 动态创建的元素,click() 没有办法绑定事件,on()可以给动态生存的元素绑定事件;
        
        $('ul').on('click','li',function(){
            alert('tangtang')
        })
        var li = $('<li>我是后来创建的</li>');
    
        

4.2 事件处理off() 解绑事件

off()方法可以移除通过 on()方法添加的事件处理程序
    
        $('p').off()// 解绑p 元素所有事件处理程序;
        $('p').off('click')// 解绑p 元素上面的点击事件 后面的foo 是侦听函数名;
        $('ul').off('click','li')//解绑事件委托

    
如果有的事件只想触发一次,可以使用one()来绑定事件;
    
        $('p').one('click',function(){
            alert(11)
        })

    

4.3 自动触发事件 trigger()

1.元素.事件()
    
        $('p').click();

    
2.元素.trigger('事件')
    
        $('div').trigger('click');

    
3.元素.triggerHandler('事件'),不会触发元素的默认行为
    
        $('div').triggerHandler('click');

    

5.jQuery对象拷贝

$.extend([deep],target,object1,[objectN])

  • 1.deep: 如果设为true 为深拷贝,默认false 浅拷贝
  • 2.target: 要拷贝的目标对象
  • 3.object1:待拷贝到第一个对象的对象
  • 4.浅拷贝
  •             
                   $.extend(target,obj);
                   //浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象,会覆盖原来的
                
            
  • 5.深拷贝
  •             
                   $.extend(true,target,obj);
                   //深拷贝把里面的数据完全复制一份给目标对象,如果里面有不冲突的属性,会合并到一起
                
            

6.jQuery多库共存

  • 1.如果$ 符号冲突 我们使用 jQuery
  • 2.让jquery 释放对$ 控制权, 让用户自己决定
  •             
                    var suibian = jQuery.noConflict();
                
            

7.Dom对象与jQuery对象的互转

a.Dom对象转换为jQuery对象

1⃣️直接获取视频,得到就是jQuery对象

        
            $('video');
        
    

2⃣️我们已经使用原生js,获取过来 Dom对象

        
            var myvide = document.querySelector('video');
            $(myvideo);
        
    

b.jQuery对象转换为Dom对象(两种方法)

    
        $('div')[index] //index 是索引号
        $('div').get(index) //index 是索引号
        $('video')[0].play();
        $('video').get(0).play();
    

8.jQuery事件插件的使用

  • 1.瀑布流
  • 2.图片懒加载
  • 3.全屏滚动
  • http://www.dowebok.com/demo/2014/77/
  • 4.bootstrap组件
  • 5.bootstrapJS组件

9.jQuery实现todoList案例

todoList 案例分析

  • 1.刷新页面不会丢失数据,因此需要用到本地存储 localStorage
  • 2.核心思路:不管按下回车,还是点击复选框,都是把本地存储的数据加载到页面中,这样保证刷新关闭页面不会丢失数据
  • 3.存储的数据格式:var todolist =[{title:'xxx',done:false}]
  • 4.注意点:
  • a.本地存储localStorage里面只能存储字符串格式,因此需要把对象转换为字符串JSON.stringify(data)

    b.获取本地存储的数据,我们需要把里面的字符串数据转换为 对象格式 JSON.parse(),我们才能使用里面的数据;

                
                    localStorage.setItem('todo',JSON.stringify(todolist));
                    var data = localStorage.getItem('todo');
                    data=JSON.parse(data);
                
            

todoList 按下回车把新数据添加到本地存储里面

  • 1.切记:页面中的数据,都要从本地存储里面获取,这样刷新页面不会丢失数据,所以要先把数据保存到本地存储里面;
  • 2.利用事件对象.keyCode判断用户按下回车键(13)
  • 3.声明一个数组,保存数据
  • 4.先要读取本地存储原来的数据(声明函数getData()),放到这个数组里面
  • 5.之后把最新从表单获取过来的数据,追加到数组里面
  • 6.最后把数组存储给本地存储(声明函数savaDate())
  •             
                    $(function(){
                       //键盘按下事件
                        $('#title').on('keydown',function(event){
                            if(event.keyCode===13){
                               //先要读取本地存储原来的数据
                               var local = getDate();
                               //把local数组进行更新数据,把最新的数据追加给local数组;
                               local.push({title:$(this).val(),done:false});
                               //把这个数组local 存储到本地存储
                               saveDate(loacl);
                               //本地存储数据渲染加载到页面
                               load();
    
                            }
                        })
                        //读取本地存储的数据
                        function getDate(){
                            var data = localStroge.getItem('todolist');
                            if(data !==null){
                                //本地存储里面的数据是字符串格式的,但是我们需要的是对象格式的
                                return JSON.parse(data)
    
                            }else{
                                return [];
                            }
                        }
    
                        //保存本地存储数据
                        function saveDate(data){
                            localStroge.setItem('todolist',JSON.stringify(data));
                        }
    
                        //渲染加载数据
                        function load(){
                            //读取本地存储的数据
                            var data = getDate();
                            //遍历之前先要清空ol里面的元素内容
                            $("ol").empty();
                            //遍历这个数据
                            $.each(data,function(i,n){
                               $('ol').prepend('<li> <input type="checkbox" > <p></p> <a href="javascriot:;">
                               </a></li>')
                            })
                        }
                    })
                
            

todoList 本地存储数据渲染加载到页面

  • 1.因为后面也会经常渲染加载操作,所以声明一个函数load,方便后面调用
  • 2.先读取本地存储数据(数据不要忘记转换为对象格式)
  • 3.之后遍历这个数据($.each()),有几条数据,就生存几个小li 添加到ol里面
  • 4.先要读取本地存储原来的数据(声明函数getData()),放到这个数组里面
  • 5.之后把最新从表单获取过来的数据,追加到数组里面
  • 6.最后把数组存储给本地存储(声明函数savaDate())
  •             
                代码如上
                
            
发布时间:2019-11-09