一、动画

  1. // jq的动画:
  2. // 1. animate()
  3. // $(selector).animate(target, duration,easing动画效果, after)
  4. let $btn = $('.btn');
  5. $btn.click(function () {
  6. // 这个事件函数中,如果你要用 this,就不要用箭头函数
  7. $('.animate').animate({
  8. width: 400,
  9. height: 400
  10. }, 2000)
  11. });
  12. // 2. stop() 停止元素当前正在执行的动画,不管它是否执行完;(用来清除动画),一般用来动画开始前先清除之前的动画;
  13. $btn.click(function () {
  14. // 这个事件函数中,如果你要用 this,就不要用箭头函数
  15. $('.animate').animate({
  16. width: 400,
  17. height: 400
  18. }, 2000);
  19. setTimeout(() => {
  20. $('.animate').stop();
  21. }, 1000);
  22. });
  23. // 3. finish() 结束当前动画,忽略当前动画的时间,直接到终点;
  24. $btn.click(function () {
  25. // 这个事件函数中,如果你要用 this,就不要用箭头函数
  26. $('.animate').animate({
  27. width: 400,
  28. height: 400
  29. }, 2000);
  30. setTimeout(() => {
  31. $('.animate').finish();
  32. }, 800);
  33. });

二、事件

  1. // jq 绑定事件有两种方式:
  2. // 1. 把事件名中的 on 去掉,变成 jq 对应的方法,事件函数以回调的形式传给对应的方法;如原生的 onclick 事件,在 jq 中变成 click(事件函数) 方法
  3. let $btn2 = $('.btn2');
  4. /*$btn2.click(function () {
  5. console.log(this); // this 还是绑定当前事件的元素,并且原生的元素对象;
  6. $(this).css({
  7. backgroundColor: 'red'
  8. });
  9. });*/
  10. // 2. jq 中提供了一个 on 方法,on 方法有两个参数,第一个是去掉 on 的事件名,第二个参数是事件函数
  11. $btn2.on('click', function () {
  12. console.log(this); // this 是绑定当前事件的元素对象(原生)
  13. });
  14. // 3. off() 方法,解绑事件(移除事件)
  15. // $btn2.off('click');
  16. // 4. trigger() 用代码触发事件执行;
  17. $btn2.trigger('click');

三、AJAX

  1. // ajax 方法是 jQ 的静态方法;ajax 定义在 jQ 自己身上,没有定义在原型上,只有 jQuery 自己能调用
  2. $.ajax({
  3. url: 'json/data.json', // 接口
  4. method: 'GET', // http method 请求方式,默认'GET'
  5. async: true, // 是否异步,默认值 true,表示异步;
  6. dataType: 'json', // 数据类型,因为 jq 的 ajax 帮我们格式化数据,所以告诉它数据类型
  7. data: {
  8. id: '17',
  9. price: 1000
  10. }, // POST 请求的参数,是发送给服务器的数据
  11. success (data) {
  12. // 如果 ajax 请求成功会调用这个函数;这个 data 就是请求回来的数据,并且jq会帮我们处理成对象,不用我们再 JSON.parse()
  13. console.log(data);
  14. },
  15. error (err) {
  16. // 如果 ajax 请求失败,会调用这个函数
  17. console.log(err);
  18. }
  19. });

四、each

  1. // jq 的 each 可以用来遍历数组和对象
  2. // 1. 遍历一个数组:
  3. let ary = [1, 2, 3, 4, 5];
  4. $.each(ary, function (index, item) {
  5. // console.log(index, item);
  6. });
  7. // 2. 遍历一个对象
  8. let obj = {
  9. name: 'mabin',
  10. age: 18,
  11. title: 'Commander'
  12. };
  13. $.each(obj, function (key, value) {
  14. // console.log(key, value);
  15. });
  16. // 3. jq 隐式调用 each 方法
  17. $('.header li').click(function () {
  18. // $('.header li') 获取来的是一个集合,jq 默认调用 each 方法,给集合中的每一个都绑定事件;
  19. console.log($(this).index());
  20. });

五、原型挂载原理

  1. (function () {
  2. var version = '1.1.3',
  3. jQuery = function (selector, context) {
  4. return new jQuery.prototype.init(selector, context);
  5. };
  6. // 函数有三种角色,其中一种是对象,把 jQuery 当成一个对象,为这个对象增加一个 fn 属性,这个属性的值是 jQuery 的原型;
  7. jQuery.fn = jQuery.prototype = {
  8. jquery: version,
  9. constructor: jQuery, // 给原型重定向后需要重新制定 constructor 属性
  10. // .... 很多方法
  11. };
  12. // 给 jQuery 自身和 jQuery 的原型增加一个属性 extend,值都是一个函数;
  13. jQuery.extend = jQuery.fn.extend = function () {
  14. // .....
  15. }; // extend 是用来给 jQuery 自身或者原型上增加方法的
  16. var init = jQuery.fn.init = function () {
  17. // ...
  18. };
  19. init.prototype = jQuery.fn; // 让 init 的原型也指向了 jQuery 的原型;此时,init 的实例同样可以访问 jQuery 的原型,此时 init 的实例相当于是 jQuery 的原型;
  20. window.jQuery = window.$ = jQuery;
  21. })();