JavaScript库:即 library,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预先定义好的函数在里面,比如动画animate、hide、show,比如获取元素等。
简单理解: 就是一个JS 文件,里面对我们原生js代码进行了封装,存放到里面。这样我们可以快速高效的使用,比如 jQuery,就是为了快速方便的操作DOM,里面基本都是函数(方法)。
常见的JavaScript库:
jQuery ,Prototype ,YUI ,Dojo ,Ext JS ,移动端的zepto
这些库都是对原声JavaScript的封装,内部都是用 JavaScript实现的。
jQuery 是一个快速、简洁的 JavaScript 库,其设计的宗旨是“write Less,Do More”,即倡导写更少的代码,做更多的事情。
j 就是 JavaScript; Query 查询; 意思就是查询js,把js中的DOM操作做了封装,我们可以快速的查询使用里面的功能。
jQuery 封装了 JavaScript 常用的功能代码,优化了 DOM 操作、事件处理、动画设计和 Ajax 交互。
学习jQuery本质: 就是学习调用这些函数(方法)。
jQuery 出现的目的是加快前端人员的开发速度,我们可以非常方便的调用和使用它,从而提高开发效率。
轻量级。核心文件才几十kb,不会影响页面加载速度
跨浏览器兼容。基本兼容了现在主流的浏览器
链式编程、隐式迭代
对事件、样式、动画支持,大大简化了DOM操作
支持插件扩展开发。有着丰富的第三方的插件,例如:
树形菜单、日期控件、轮播图等 免费、开源
各个版本的下载:https://code.jquery.com/
1x :兼容 IE 678 等低版本浏览器, 官网不再更新
2x :不兼容 IE 678 等低版本浏览器, 官网不再更新
3x :不兼容 IE 678 等低版本浏览器, 是官方主要更新维护的版本
1.引入jQuery文件 2.使用即可
$(document).ready(function(){
... // 此处是页面DOM加载完成的入口
});
下面是简写:
$(function() {
...// 此处是页面DOM加载完成的入口
})
// 1. $ 是jQuery的别称(另外的名字)
// $(function() {
// alert(11)
// });
jQuery(function() {
// alert(11)
// $('div').hide();
jQuery('div').hide();
});
// 2. $同时也是jQuery的 顶级对象
var mySpan = document.querySelector('span'); // mySpan 是DOM对象
$('div'); // $('div')是一个jQuery 对象
DOM 对象与 jQuery 对象之间是可以相互转换的。
因为原生js 比 jQuery 更大,原生的一些属性和方法 jQuery没有给我们封装. 要想使用这些属性和方法需要把jQuery对象转换为DOM对象才能使用。
1. DOM对象转换为 jQuery对象
// (1) 我们直接获取视频,得到就是jQuery对象
$('video');
// (2) 我们已经使用原生js 获取过来 DOM对象
var myvideo = document.querySelector('video');
// $(myvideo).play(); jquery里面没有play 这个方法
2. jQuery对象转换为DOM对象(有两种方式)
// myvideo.play();
$('video')[0].play() 方式1 []
$('video').get(0).play() 方式2 ()里面填索引号
$(“选择器”) 里面选择器直接写 CSS 选择器即可,但是要加引号
$("#id");$("*");$(".class");$("div");$("div,p,li");$("li.current");
子代选择器 $("ul>li") 表示亲儿子层级的元素。
子代选择器 $("ul li") 表示ul下的所以li 包括孙子级别
遍历内部 DOM 元素(伪数组形式存储)的过程就叫做隐式迭代。
简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
筛选选择器,顾名思义就是在所有的选项中选择满足条件的进行筛选选择.
<ul>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ul>
<ol>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
<li>多个里面筛选几个</li>
</ol>
<script>
$(function() {
$("ul li:first").css("background", "pink"); 获取第一个
$("ul li:last").css("background", "blue"); 获取最后一个
$("ul li:eq(3)").css("background", "red"); 获取index个,index从0开始。
$("ol li:odd").css("background", "yellow"); 获取索引号为奇数的
$("ol li:even").css("background", "red"); 获取索引号为偶数的
})
</script>
1. 父 parent() 返回的是 最近一级的父级元素 亲爸爸
console.log($(".son").parent());
2. 子 children() find()
(1) 亲儿子 children() 类似子代选择器 ul>li
$(".nav").children("p").css("color", "red");
(2) 可以选里面所有的孩子 包括儿子和孙子 find() 类似于后代选择器
$(".nav").find("p").css("color", "red");
3. 兄弟元素siblings 除了自身元素之外的所有亲兄弟
$("ol .item").siblings("li").css("color", "red");
3. 第n个元素 eq()
(1) 我们可以利用选择器的方式选择 :eq()
(2) 我们可以利用选择方法的方式选择 更推荐这种写法
$("ul li").eq(2).css("color", "blue");
4. 判断是否有某个类名
console.log($("div:first").hasClass("current"));
console.log($("div:last").hasClass("current"));
5. 查找之前 和 之后 的所有同辈元素。
$('.first').nextAll();查找当前元素之后所有的同辈元素
$('.last').prevAll(); 查找当前元素之前所有的同辈元素
$(function() {
1. 隐式迭代 给所以的按钮都绑定了点击事件
$("button").click(function() {
2. 当前的元素变化背景颜色
$(this).css("background", "red");
// 3. 其余的兄弟去掉背景颜色 隐式迭代
$(this).siblings("button").css("background", "");
})
})
链式编程是为了节省代码量,看起来更优雅。
上面的代码用 链式编程 的写法:
$(this).css("color", "red").siblings().css("color", "");
$(function() {
1. 鼠标经过左侧的小li
$("#left li").mouseover(function() {
2. 得到当前小li 的索引号
var index = $(this).index();
console.log(index);
3. 让我们右侧的盒子相应索引号的图片显示出来就好了
// $("#content div").eq(index).show();
4. 让其余的图片(就是其他的兄弟)隐藏起来
// $("#content div").eq(index).siblings().hide();
5. 链式编程 把3和4 写在一起
$("#content div").eq(index).show().siblings().hide();
})
})
jQuery 可以使用 css 方法来修改简单元素样式; 也可以操作类,修改多个样式。
$(function() {
1. 只写属性名,返回的是值。 !属性名一定要加引号!
console.log($("div").css("width"));
2. 参数是属性名,属性值,逗号分隔,是设置一组样式,属性必须加引号,
值如果是数字可以不用跟单位和引号
$("div").css("width", "300px");
$("div").css("width", 300);
3. 如果是复合属性则必须采取驼峰命名法,如果值不是数字,则需要加引号
$("div").css({
width: 400,
height: 400,
backgroundColor: "red"
})
})
作用等同于以前的 classList,可以操作类样式, 注意操作类里面的参数不要加点。
$(function() {
1. 添加类 addClass()
$("div").click(function() {
$(this).addClass("current");
});
2. 删除类 removeClass()
$("div").click(function() {
$(this).removeClass("current");
});
3. 切换类 toggleClass()
$("div").click(function() {
$(this).toggleClass("current");
});
})
点击上部的li,当前li 添加current类,其余兄弟移除类。
点击的同时,得到当前li 的索引号
让下部里面相应索引号的item显示,其余的item隐藏
$(function() {
1.点击上部的li,当前li 添加current类,其余兄弟移除类
$(".tab_list li").click(function() {
// 链式编程操作
$(this).addClass("current").siblings().removeClass("current");
2.点击的同时,得到当前li 的索引号
var index = $(this).index();
console.log(index);
3.让下部里面相应索引号的item显示,其余的item隐藏
$(".tab_con .item").eq(index).show().siblings().hide();
});
})
原生 JS 中 className 会覆盖元素原先里面的类名。
jQuery 里面类操作只是对指定类进行操作,不影响原先的类名。
var one = document.querySelector(".one");
one.className = "two"; // 这里 以前的 one 类名就会消失
$(".one").addClass("two"); // 这个addClass相当于追加类名 不影响以前的类名,以前的one 还在
jQuery 给我们封装了很多动画效果,最为常见的如下:
显示隐藏: show() hide() 转换 : toggle()
滑动: slideDown() slideUp() 转换:slideToggle()
淡入淡出: fadeIn() fadeOut() fadeTO() 转换:fadeToggle()
自定义动画: animate()
$(function() {
$("button").eq(0).click(function() {
$("div").show(1000, function() {
alert(1);
});
}) 这个1000 是1秒后显示或隐藏,后面的函数是回调函数,完全隐藏后才弹出
$("button").eq(1).click(function() {
$("div").hide(1000, function() {
alert(1);
});
})
$("button").eq(2).click(function() {
$("div").toggle(1000);
})
一般情况下,我们都不加参数直接显示隐藏就可以了
});
参数:
(1)参数都可以省略, 无动画直接显示。
(2)speed:三种预定速度之一的字符串(“slow”,“normal”, or “fast”)或表示动画时长的毫秒数值(如:1000)。
(3)easing:(Optional) 用来指定切换效果,默认是“swing”,可用参数“linear”。
(4)fn: 回调函数,在动画完成时执行的函数,每个元素执行一次。
建议:平时一般不带参数,直接显示隐藏即可。
参数跟上方一样
$(function() {
$("button").eq(0).click(function() {
下滑动 slideDown()
$("div").slideDown();
})
$("button").eq(1).click(function() {
上滑动 slideUp() 500是 滑动0.5秒
$("div").slideUp(500);
})
$("button").eq(2).click(function() {
滑动切换 slideToggle()
$("div").slideToggle(500);
});
});
hover([over],out)
(1)over:鼠标移到元素上要触发的函数(相当于mouseenter)
(2)out:鼠标移出元素要触发的函数(相当于mouseleave)
(3)如果只写一个函数,则鼠标经过和离开都会触发它
鼠标经过
$(".nav>li").mouseover(function() {
// // $(this) jQuery 当前元素 this不要加引号
// // show() 显示元素 hide() 隐藏元素
// $(this).children("ul").slideDown(200);
// });
鼠标离开
// $(".nav>li").mouseout(function() {
// $(this).children("ul").slideUp(200);
// });
1. 事件切换 hover 就是鼠标经过和离开的复合写法
$(".nav>li").hover(function() {
$(this).children("ul").slideDown(200);
}, function() {
$(this).children("ul").slideUp(200);
});
2. 事件切换 hover 如果只写一个函数,那么鼠标经过和鼠标离开都会触发这个函数
$(".nav>li").hover(function() {
$(this).children("ul").slideToggle();
});
})
1. 动画或效果队列
动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。
2. 停止排队
.stop()
$(".nav>li").hover(function() {
stop 方法必须写到动画的前面
$(this).children("ul").stop().slideToggle();
(1)stop() 方法用于停止动画或效果。
(2) 注意: stop() 写到动画或者效果的前面, 相当于停止结束上一次的动画。
里面参数和上面一样,
但是 fadeTo()里面多一个参数, 这个的作用是 渐进方式调整到指定的不透明度(透明度取值 0-1 之间)
注意!!! 他的时间参数和透明度必须写。实例如下!
$(function() {
$("button").eq(0).click(function() {
// 淡入 fadeIn()
$("div").fadeIn(1000);
})
$("button").eq(1).click(function() {
// 淡出 fadeOut()
$("div").fadeOut(1000);
})
$("button").eq(2).click(function() {
// 淡入淡出切换 fadeToggle()
$("div").fadeToggle(1000);
});
$("button").eq(3).click(function() {
修改透明度 fadeTo() 这个速度和透明度要必须写
$("div").fadeTo(1000, 0.5);
});
});
参数比基础参数多一个 params。
params: 想要更改的样式属性,以对象形式传递,必须写。 属性名可以不用带引号, 如果是复合属性则需要采取驼峰命名法 borderLeft。其余参数都可以省略。
$(function() {
$("button").click(function() {
$("div").animate({
// 这个中括号里就是 params 参数。
left: 500,
top: 300,
opacity: .4, 这个是透明度
width: 500
}, 500);
})
})
$(function() {
//鼠标进入的时候,其他的li标签透明度:0.5
$(".wrap li").hover(function() {
$(this).siblings().stop().fadeTo(400, 0.5);
}, function() {
// 鼠标离开,其他li 透明度改为 1
$(this).siblings().stop().fadeTo(400, 1);
})
});
① 鼠标经过某个小li 有两步操作:
② 当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
③ 其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出
$(function() {
鼠标经过某个小li 有两步操作:
$(".king li").mouseenter(function() {
1.当前小li 宽度变为 224px, 同时里面的小图片淡出,大图片淡入
$(this).stop().animate({
width: 224
}).find(".small").stop().fadeOut().siblings(".big").stop().fadeIn();
2.其余兄弟小li宽度变为69px, 小图片淡入, 大图片淡出
$(this).siblings("li").stop().animate({
width: 69
}).find(".small").stop().fadeIn().siblings(".big").stop().fadeOut();
})
});