zoukankan      html  css  js  c++  java
  • jQuery中的动画与ajax的应用

    1、jQuery中的动画

    1、显示与隐藏

    jQuery对象.show(speed, easing, callback); 显示

    jQuery对象.hide(speed, easing, callback); 隐藏

    jQuery对象.toggle(speed, easing, callback); 开关效果。如果显示,就隐藏; 如果隐藏,就显示

    参数:

    • speed:时间

      • number(单位是毫秒) 'fast'(200ms) 'normal'(400ms) 'slow'(600ms)

      • 时间参数不写,默认为0

    • easing: 运动的形式

      • "swing" - 慢快慢 "linear" - 匀速

    • callback: 回调

    <button>show</button>
    <button>hide</button>
    <button>toggle</button>
    <div id="box"></div>
    var btn = $('button');
    var box = $('#box');
    // 通常的用法,是不加参数,代替我们css的显示和隐藏
    // 显示
    btn.eq(0).click(function () {
        box.show(3000, function () {
            console.log('我显示了');
        });
    });
    ​
    // 隐藏
    btn.eq(1).click(function () {
        box.hide(3000, function () {
            console.log('我隐藏了');
        });
    });
    ​
    // 切换
    btn.eq(2).click(function () {
        box.toggle();
    });

    2、透明度的改变

    jQuery对象.fadeIn(speed, easing, callback) 显示

    jQuery对象.fadeOut(speed, easing, callback) 隐藏

    jQuery对象.fadeTo(speed, 透明度, easing, callback) 透明到多少

    jQuery对象.fadeToggle(speed, easing, callback) 如果显示的,则隐藏,如果是隐藏的,则显示

    注意:如果不写时间参数,时间默认是400ms

    <button>fadeIn</button>
    <button>fadeOut</button>
    <button>fadeTo</button>
    <button>fadeToggle</button>
    <div id="box"></div>
    var btn = $('button');
    var box = $('#box');
    ​
    // 显示
    btn.eq(0).click(function () {
        box.fadeIn(3000, 'linear', function () {
            console.log('我显示了');
        });
    });
    ​
    // 隐藏
    btn.eq(1).click(function () {
        box.fadeOut(3000, 'linear', function () {
            console.log('我隐藏了');
        });
    });
    ​
    // 透明到多少
    btn.eq(2).click(function () {
        box.fadeTo(3000, 0.5, 'linear', function () {
            console.log('我透明到0.5了');
        });
    });
    ​
    // 切换
    btn.eq(3).click(function () {
        box.fadeToggle(3000, 'linear', function () {
            console.log('我切换了');
        });
    });

    3、高度的改变

    jQuery对象.slideDown(speed, easing, callback); 显示

    jQuery对象.slideUp(speed, easing, callback); 隐藏

    jQuery对象.slideToggle(speed, easing, callback); 如果是显示的,则隐藏,如果是隐藏的,则显示

    注意:如果不写时间参数,时间默认是400ms

    <button>slideDown</button>
    <button>slideUp</button>
    <button>slideToggle</button>
    <div id="box"></div>
    // 显示
    btn.eq(0).click(function () {
        box.slideDown(3000);
    });
    ​
    // 隐藏
    btn.eq(1).click(function () {
        box.slideUp(3000);
    });
    ​
    // 切换
    btn.eq(2).click(function () {
        box.slideToggle();
    });
     

    4、自定义动画animate

    • jQuery对象.animate({动画的参数}, 时间, 运动形式, 回调);

      第一个参数 : 运动的值和属性 { 300, height: 300}

      第二个参数 : 时间(运动的快慢) 默认 : 400ms

      第三个参数 : 运动形式,两种运动形式( 默认 : swing(慢快慢) linear(匀速) )

      第四个参数 : 回调函数(回调中的this是运动的这个元素)

    var box = $('#box');
    ​
    // 基本运动
    box.click(function () {
        box.animate({
             500
        }, 3000, 'linear', function () {
            console.log('我运动完成了');
        });
    });
    ​
    // ---------------------------------------------
    // 同时运动多个值
    box.click(function () {
        box.animate({
             500,
            height: 500,
            left: 300,
            top: 300,
            opacity: 0.3
        }, 3000, 'linear', function () {
            console.log('我运动完成了');
        });
    });
    ​
    // ---------------------------------------------
    // 累加、累减动画,在原来的基础上加减
    box.click(function () {
        box.animate({
            left: '+=50'
        });
    });
    ​
    // ---------------------------------------------
    // 链式运动
    box.click(function () {
        box
            .animate({  500 }, 3000)
            .animate({ height: 500 }, 3000)
            .animate({ left: 500 }, 3000)
            .animate({ top: 500 }, 3000);
    });
    ​
    // ---------------------------------------------
    // 动画队列
    // 需求:元素宽运动到了500后,再把元素背景变成黄色。
    // 但是如下这样写达不到效果,而是一开始背景就变成黄色了,因为css()并不会加入动画队列中,而是会立即执行。
    box.click(function () {
        box
            .animate({  500 }, 3000)
            .css('background', 'yellow');
    });
    ​
    // 解决方式一:回调(简单,但是如果多次回调,会产生回调地狱)
    box.click(function () {
        box.animate({
             500
        }, 3000, function () {
            $(this).css('background', 'yellow');
        })
    });
    ​
    // 需求:元素宽运动到了500后,再把元素背景变成黄色。再高运动到500
    // 解决方式二:queue(),它接收一个函数做为参数,可以将这个函数参数添到动画队列。这个函数有一个参数next,我们需要调用它,才能继续执行后续的运动队列
    box.click(function () {
        box
            .animate({  500 }, 3000)
            .queue(function (next) {
                $(this).css('background', 'yellow');
                next();
            })
            .animate({ height: 500 }, 3000);
    });

    5、是否处于动画状态

    jquery对象.is(':animated') 返回真假,真为正在运动,假为没有运动

    <button>按钮</button>
    <div id="box"></div>
    $('#box').click(function () {
        $(this).animate({
             500
        }, 5000)
    })
    ​
    // jQuery对象.is(':animated');  这个元素是否在做运动
    $('button').click(function () {
        // 判断box是否在运动
        console.log($('#box').is(':animated'));
    });

    6、延迟运动

    在动画执行的过程中,如果想对动画进行延迟操作,那么可以使用delay()方法。

    jQuery对象.delay(时间);

    // jQuery对象.delay(时间);
    $('#box').click(function () {
        $(this)
            .animate({  500 }, 3000)
            .delay(3000) // 延迟3秒再做下一步运动
            .animate({ height: 500 }, 3000)
            .animate({ left: 500 }, 3000)
    });
     

    7、停止运动

    stop

    jQuery对象.stop(clearQueue, gotoEnd);

    clearQueue:代表是否要清空末执行完的动画队列,默认false。

    gotoEnd:代表是否直接将正在执行的动画跳转到末状态,默认false。

    finish

    jQuery对象.finish(); // 所有运动立即到终点

    <button>停止</button>
    <div id="box"></div>
    var btn = $('button');
    var box = $('#box');
    ​
    box.click(function () {
        $(this)
            .animate({  500 }, 3000)
            .animate({ height: 500 }, 3000);
    });
    ​
    // jQuery对象.stop(clearQueue, gotoEnd);
    //      clearQueue:代表是否要清空未执行完的动画队列,默认false。
    //      gotoEnd:代表是否直接将正在执行的动画跳转到末状态,默认false。
    // jQuery对象.finish(); // 所有运动立即到终点
    // 停止
    btn.click(function () {
        // box.stop(); // 停止当前,后续的继续
        // box.stop(false, true); // 当前立即到终点,后续的继续
        // box.stop(true, false); // 停止当前,停止后续
        // box.stop(true, true); // 停止当前,停止后续
    ​
        box.finish(); // 所有立即到终点
    });

    2、ajax的应用

    1、ajax优势与不足

    优势:

    1、不需要插件支持

    2、优秀的用户体验

    3、提高web程序的性能

    4、减轻服务器和带宽的负担

    不足:

    破坏浏览器前进、后退按钮的正常功能

    对搜索引擎的支持不足

    2、$.ajax({参数})

    是jquery的ajax请求最底层的方法

    $.ajax({
        url: './data/networkClass.json', // 请求的地址
        cache: false, // 是否缓存。get请求时,如果url地址和上次没有发生变化,则会走缓存,为了不走缓存,jQuery在地址的后面加了_=时间戳
        type: 'get', // 请求的方式,get/post 默认get
        timeout: 5000, // 设置超时时间 时间ms
        data: 'a=1&b=2', // 发送到后端的数据
        // dataType: '', // 期待后端返回的数据类型,xml, html, script, json, jsonp, text
        success: function (data) { // 成功的回调
            console.log(data);
        },
        error: function (e) { // 失败的回调
            console.log(e);
        },
        complete: function () { // 不论成功失败,都会走这里
            console.log('执行到我了');
        }
    })

    3、$.get()

    它是建立在$.ajax之上的一个请求

    格式:$.get(url, 发到后端的数据, 成功的回调); 没有数据,可以不写,发送get请求

    // 不带参数
    $.get('./data/networkClass.json', function (data) {
        console.log(data);
    })
    ​
    // 带参数
    $.get('./data/networkClass.json', 'a=1&b=2', function (data) {
        console.log(data);
    })

    4、$.post()

    格式:$.post(url, 发送到后端的数据, 回调); 没有数据,可以不写,发送post请求

    // 不带参数
    $.post('./data/networkClass.json', function (data) {
        console.log(data);
    })
    ​
    // 带参数
    $.post('./data/networkClass.json', 'a=1&b=2', function (data) {
        console.log(data);
    })

    5、get请求和post请求的区别

    1、get请求会将参数跟在URL后进行传递,而post请求则是作为HTTP消息的实体内容发送给WEB服务器。当然,在ajax请求中,这种区别对用户是不可见的。

    2、get请求方式对传输的数据有大小限制(通常不能大于2KB),而使用post方式传递的数据量要比get方式大得多(理论上不受限制)。

    3、get方式请求的数据会被浏览器缓存起来,因此其他人就可以从浏览器的历史记录中读取到这些数据,例如账号和密码等。在某种情况下,get方式会带来严重的安全性问题,而post方式相对来说可以避免这些问题。

    4、get方式和post方式传递的数据在服务器端获取也不相同。在php中,get方式的数据可以用$GET[]获取,而post方式可以用$POST[]获取。两种方式都可以用$_REQUEST[]来获取。

    6、jQuery中的jsonp

    跨域:域名、端口、协议任何一项不同,即为跨域

    浏览器对于JavaScript的同源策略的限制:例如a.cn下面的js不能调用b.cn中的js。因为a.cn和b.cn是不同域,所以跨域就出现了。

    jsonp是jQuery中的跨域处理

    jquery中的jsonp,不是ajax,只不过它和ajax都集中在$.ajax里面

    var url = 'https://p.3.cn/prices/mgets?skuIds=J_5089253&type=1';
    $.ajax({
        url: url,
        dataType: 'jsonp', // 解决跨域
        success: function (data) {
            console.log(data);
        },
        error: function (e) {
            console.log(e);
        }
    });

    7、jsonp的原理

    • 首先我们需要明白,在页面上直接发起一个跨域的ajax请求是不可以的,但是,在页面上引入不同域上的js脚本却是可以的。

    • 那么如何使用<script src="">来完成一个跨域请求

    • 当创建并添加一个<script src="xxx&callback=aaa">标签,用于发起跨域请求;注意看请求地址后面带了一个callback=aaa的参数;

    • aaa即是回调函数名称,传到后台,用于包裹数据。数据返回到前端后,就是aaa(data)的形式,因为是script脚本,所以自动调用全局的aaa函数,而data就是aaa的参数。

    • 至此,我们算是跨域把数据请求回来了,但是比较麻烦,需要自己写脚本发起请求,然后写个回调函数处理数据,不是很方便。

    注意:

    可以看到,jsonp方式不支持POST方式跨域请求,就算指定成POST方式,会自动转为GET方式;而后端如果设置成POST方式了,那就请求不了了。

    jQuery的ajax方式以jsonp类型发起跨域请求,其原理跟<script>脚本请求一样,因此使用jsonp时也只能使用GET方式发起跨域请求。跨域请求需要服务端配合,设置callback,才能完成跨域请求。

    8、数据串连化

    form表单.serialize() 串连成一个字符串

    form表单.serializeArray() 串连成一个数组

    作用:可以将 form中的数据,串连起来,不用一个一个去获取

    <form>
        <input type="text" name="a" value="1">
        <input type="text" name="b" value="2">
        <input type="text" name="c" value="3">
    </form>
    <button>按钮</button>
    $('button').click(function () {
        console.log($('form').serialize()); // a=1&b=2&c=3
        console.log($('form').serializeArray()); // [{ name: "a", value: "1" }, { name: "b", value: "2" }]
    });
     



  • 相关阅读:
    火狐插件火狐黑客插件将Firefox变成黑客工具的七个插件
    memcache安装环境:WINDOWS 7
    PHP正则表达式
    968. 监控二叉树 力扣(困难) dfs 官方说DP
    375. 猜数字大小 II 力扣(中等) 区间动态规划、记忆化搜索
    629. K个逆序对数组 力扣(困难) 区间动态规划
    剑指 Offer 51. 数组中的逆序对 力扣(困难) 巧用归并排序算法
    488. 祖玛游戏 力扣(困难) dfs
    16. 最接近的三数之和 力扣(中等) 双指针
    319. 灯泡开关 力扣(中等) 数论
  • 原文地址:https://www.cnblogs.com/cyf666cool/p/13747442.html
Copyright © 2011-2022 走看看