|

常见的JavaScript库

| | —- | | jQuery | | Prototype | | YUI | | Dojo | | Ext JS | | 移动端的zepto | | 这些库都是对原生JavaScript的封装,内部都是用JavaScript实现的,我们主要学习的是jQuery。
jQuery封装了JavaScript常用的功能代码,优化了DOM操作、事件处理、动画设计和Ajax交互。
学习jQuery本质:就是学习调用这些函数(方法)。
jQuery出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。 | |

jQuery的优点

| | ●轻量级。核心文件才几十kb,不会影响页面加载速度 | | ●跨浏览器兼容。基本兼容了现在主流的浏览器 | | ●链式编程、隐式迭代 | | ●对事件、样式、动画支持,大大简化了DOM操作 | | ●支持插件扩展开发。有着丰富的第三方的插件,例如∶树形菜单、日期控件、轮播图等 | | ●免费、开源 |

jQuery的入口函数

$(function () { //内容 })

$(document.ready(function()) { //内容 })

jQuery对象和DOM对象

1.DOM对象转换为jQuery对象$(DOM对象): $(‘div’)
2.jQuery对象转换为DOM对象(两种) $(‘div’)[index] index是索引号
$(‘div’).get(index) index是索引号

jQuery基础选择器

名称 用法 描述
ID选择器 $(“#div”) 获取指定ID的元素
全类选择器 $(‘*’) 匹配所有元素
类选择器 $(“.div”) 获取同一类class的元素
标签选择器 $(“#div”) 获取同一类标签的所有元素
并集选择器 $(“#div,p,li”) 选取多个元素
交集选择器 $(“li.current”) 交集元素
子代选择器 $(“ul>li”) 使用>号,获取亲儿子层级的元素;注意,并不会获取孙子层级的元素
后代选择器 $(“ul li”) 使用空格,代表后代选择器,获取ul下的所有li元素,包括孙子等

iQuery设置样式

$(‘div’).css(‘属性’,’值’);

jQuery筛选选择器

语法 语法 描述
:first $(‘li:first’) 获取第一个li元素
:last $(‘li:last’) 获取最后一个li元素
:eq(index) $(“li:eq(2)”) 获取到的li元素中,选择索引号为2的元素,索引号index从0开始
:odd $(“li:odd”) 获取到的li元素中,选择索引号为奇数的元素
:event $(“li:even”) 获取到的li元素中,选择索引号为偶数的元素

jQuery筛选方法

语法 用法 说明
parent( ) $(“li”).parent( ); 查找父级
parents( ) $(“li”).parents(“.one”); 查找某个父级
children(selector) $(“ul”).children(“li”); 相当于$(‘ul>li’),最后一级(亲儿子)
find(selector) $(“ul”).find(“li”); 相当于$(“ul li”),后代选择器
siblings(selector) $(“.first”).siblings(“li”); 查找兄弟节点,不包括自己本身
nextAll([expr]) $(“.first”).nextAll( ); 查找当前元素之后所有的同辈元素
prevtAll([expr]) $(“.last”).prevAll( ); 查找当前元素之前所有的同辈元素
hasClass(class) $(“div”).hasClass(“protected”); 检查当前的元素是否含有某个特定的类,如果有就返回true
eq(index) $(“li”).eq(2); 相当于$(“li:eq(2)”),index 从0开始

tab栏切换

  1. $("button").click(function () {
  2. var index = $(this).index();
  3. $("span").eq(index).show().siblings("span").hide()
  4. $(this).css("background", "red").siblings("button").css("background", "")
  5. })
设置类名 $(“div”).addClass(‘current’);
返回属性值 $(this).css(“color”);
设置属性 $(this).css(“color”,”red”);
参数可以是对象形式
属性名属性值冒号隔开
$(this).css({“color”:”white”,”font-size”:”20px”});
添加类名 $(“div”).addClass(“red”);
移除类名 $(“div”).removeClass(“red”);
切换类名 $(“div”).toggleClass(“red”);

jQuery效果

| 显示隐藏 | show( )
hide( )
toggle( ) |

([speen,[easing],[fn] ])
([speen,[easing],[fn] ])
([speen,[easing],[fn] ])

(1)参数可以省略,无动画直接显示
(2)speed :三种预定速度之一的字符串(“slow”, “normal”, or”fast”)或1000
(3)easing :(Optional)用来指定切换效果,默认是”swing”,可用参数”linear”
(4)s fn:回调函数,在动画完成时执行的函数,每个元素执行一次。

fadeTo(1000, .5 ) | | —- | —- | —- | | 滑动 | slideDown( )
slideUp( )
slideToggle( ) | | | 淡入淡出 | fadeln( )
fadeOut( )
fadeToggle( )
fadeTo( ) | | | 自定义动画 | animate( ) | animate( params,[speed],[easing],[fn] )
params:想要更改的样式属性,以对象形式传递,必须写。
属性名可以不用带引号,复合形式需要驼峰命名法。 | | 上下滑动 | hover( fn(),fn() ) | 可以只写一个function( ) | | 停止排队 | stop( ) | 动画都需要加停止排队 |

  1. //自定义动画
  2. $('button').click(function () {
  3. $(".a1").animate({
  4. left: 400,
  5. top: 300,
  6. opacity: .1,
  7. borderRadius: 100
  8. }, 2000)
  9. })

jQuery属性操作

获取属性语法 prop(“属性”)
设置属性语法 prop(“属性”,”属性值”)
获取自定义属性 attr(“index”)
设置自定义属性 attr(“index”,”属性值”)
附加数据语法 data(“name”,”value”)
获取数据语法 data(“name”)
保留两位小数 ().toFixed(2);
  1. //购物车加减商品
  2. $(".right").click(function () {
  3. var n = $(this).siblings(".itxt").val();
  4. n++;
  5. $(this).siblings(".itxt").val(n);
  6. });
  7. $(".left").click(function () {
  8. var n = $(this).siblings(".itxt").val();
  9. if (n == 1) {
  10. return false;
  11. }
  12. n--;
  13. $(this).siblings(".itxt").val(n);
  14. });

遍历元素

$(“div”).each(function(index,domEle) { xxx; })

1.each0方法遍历匹配的每一个元素。主要用DOM处理。each每一个
2.里面的回调函数有2个参数:index是每个元素的索引号; domEle是每个DOM元素对象,不是jquery对象
3.所以要想使用jquery方法,需要给这个dom元素转换为jquery对象$(domEle)

  1. $(function () {
  2. var arr = ["red", "blue", "pink", "hotpink", "green"]
  3. $("span").each(function (i, domEle) {
  4. $(domEle).css("background-color", arr[i])
  5. })

$.each(object,function(index,element){ xxx; })

1.$.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
2.里面的函数有2个参数:index是每个元素的索引号; element遍历内容

  1. $(function () {
  2. $.each({
  3. name: "andy",
  4. age: 18
  5. }, function (i, ele) {
  6. console.log(i);
  7. console.log(ele);
  8. })
内部添加 element.append(“内容”) 把内容放入匹配元素内部最后面
element.prepend(“内容”) 把内容放入匹配元素内部最前面
外部添加 element.after(“内容”) 把内容放入目标元素后面
element.before(“内容”) 把内容放入目标元素前面
删除元素 remove( ) 可以删除匹配的元素 自杀
empty( ) 可以删除匹配的元素里面的子节点 孩子
html( “” ) 可以删除匹配的元素里面的子节点 孩子

jQuery尺寸、位置操作

语法 用法
width( ) / height( ) 取得匹配元素宽度和高度值 只算width / height
innerWidth( ) / innerHieght( ) 取得匹配元素宽度和高度值 包含 padding
outerWidth( ) / outerHeight () 取得匹配元素宽度和高度值 包含padding、border
outerWidth(true) / outerHeight(true) 取得匹配元素宽度和高度值 包含padding、 borde、margin
offset( ) 距离文档的位置
position( ) 获取在父级盒子里面的定位
scrollTop( ) / scrollLeft( ) 获取元素被卷去的头部和左侧
  1. //动画返回顶部
  2. $(".back").click(function () {
  3. $("body,html").stop().animate({
  4. scrollTop: 0
  5. });
  6. })

动画电梯导航栏

  1. $(".fixedtool li").click(function () {
  2. var current = $(".floor .w").eq($(this).index()).offset().top;
  3. $("body,html").stop().animate({
  4. scrollTop: current
  5. });
  6. })

滚到哪个模块哪个模块变色

  1. // 滚到哪个模块哪个模块变色
  2. $(".floor .w").each(function (i, ele) {
  3. if ($(document).scrollTop() >= $(ele).offset().top) {
  4. console.log(i);
  5. $("fixedtool li").eq(i).addClass("current").siblings().removeClass();
  6. }
  7. })

jQuery事件

事件处理on $(“div”).on({
mouseenter:function () {
$(this).css(“background”, “skyblue”);
},
click:function () {
$(this).css(“background”, “purple”);
});


$(“div”).on(“mouseenter mouseleave”,function() {
$(this).toggleClass(“current”);
})
事件委派(可以动态绑定) $(“ul”).on(“click”,”li”,function( ) { })
解绑事件off $(“p”).off( ) 解绑p元素所有事件处理程序
$(“p”).off( “click” ) 解绑p元素上面的点击事件 后面的foo 是侦听函数名
$(“ul”).off( “click”,”li” ) 解绑事件委托
one( ) 事件只处理一次

jQuery自动触发事件

trigger( )
element.click( ) 第一种简写形式
element.trigger(“type”) 第二种自动触发模式
$(“div”).triggerHandler(“click”) 第三种自动触发,不需要鼠标点击
(不会触发元素的默认行为)

jQuery对象拷贝

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

[$.extend(targetObk,obj);]
1.deep:如果设为true为深拷贝,默认为false 浅拷贝
2.target:要拷贝的目标对象
3.object1:待拷贝到第一个对象的对象
4.objectN:待拷贝到第N个对象的对象
5.浅拷贝是把被拷贝的对象复杂数据类型中的地址拷贝给目标对象,修改目标对象会影响被拷贝对象。
6.深拷贝,前面加true,完全克隆(拷贝的对象,而不是地址),修改目标对象不会影响被考贝对象。
多库共存 jQuery解决方案
1.把里面得¥符号统一改为jQuery
2.jQuery变量规定新的名称:$.noConflict()
var xx=$no.Conflict();

jQuery常用插件

jQuery插件库 https://www.jq22.com/
jQuery插件之家[常用] http://www.htmleaf.com/
懒加载 EasyLazyload.js
全屏滚动 fullpage.js

jQuery ajax

$.ajax() $.ajax() //既可以post get delete put
格式
$.ajax({
url: “请求的接口地址”,
type: “请求接口的方式post get put delete”,
data: {
后台要求传递的参数
},
success: function(res) {
// res就是后台给你返回的数据
},
fail: function(err) {
// err就是请求失败后台返回的数据
}
})
$.get() // 只适用于get请求
$.post() // 只适用于post请求
  1. $(document).ready(function() {
  2. var str=''
  3. $.ajax({
  4. url: "https://cnodejs.org/api/v1/topics",
  5. type: "GET",
  6. data: {
  7. page: 1,
  8. limit: 40
  9. },
  10. success: function(res) {
  11. console.log(res)
  12. for(var i=0; i<res.data.length; i++) {
  13. str+=`
  14. <li>${res.data[i].title}</li>
  15. `
  16. }
  17. $("ul").html(str)
  18. },
  19. fail: function(err) {
  20. console.log(err)
  21. }
  22. })
  23. })

// 按下回车读取本地存储数控

  1. load();
  2. // 按下回车读取本地存储数控
  3. // 存储的数据格式 var todolist = [{ tltle: "xxx", done: false }]
  4. $("#title").on("keydown", function (event) {
  5. if (event.keyCode === 13) {
  6. var local = getDate();
  7. console.log(local);
  8. local.push({ title: $(this).val(), done: false });
  9. saveData(local);
  10. load();
  11. }
  12. });
  13. //读取本地存储的数据
  14. function getDate() {
  15. var data = localStorage.getItem("todolist");
  16. if (data != null) {
  17. return JSON.parse(data);
  18. } else {
  19. return [];
  20. }
  21. }
  22. // 保存本地存储数据
  23. function saveDate(data) {
  24. localStorage.setItem("todolist", JSON.stringify(data));
  25. }
  26. // toDolist本地存储数据渲染到加载页面
  27. // 渲染加载数据
  28. function load() {
  29. // 读取本地存储的数据
  30. var data = getDate();
  31. // 遍历之间先清空ol里面的元素内容
  32. $("ol").empty();
  33. $.each(data, function (i, n) {
  34. $("ol").prepend("<li>+n.title+</li>")
  35. })
  36. }