常见的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栏切换
$("button").click(function () {var index = $(this).index();$("span").eq(index).show().siblings("span").hide()$(this).css("background", "red").siblings("button").css("background", "")})
| 设置类名 | $(“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( ) | 动画都需要加停止排队 |
//自定义动画$('button').click(function () {$(".a1").animate({left: 400,top: 300,opacity: .1,borderRadius: 100}, 2000)})
jQuery属性操作
| 获取属性语法 | prop(“属性”) |
|---|---|
| 设置属性语法 | prop(“属性”,”属性值”) |
| 获取自定义属性 | attr(“index”) |
| 设置自定义属性 | attr(“index”,”属性值”) |
| 附加数据语法 | data(“name”,”value”) |
| 获取数据语法 | data(“name”) |
| 保留两位小数 | ().toFixed(2); |
//购物车加减商品$(".right").click(function () {var n = $(this).siblings(".itxt").val();n++;$(this).siblings(".itxt").val(n);});$(".left").click(function () {var n = $(this).siblings(".itxt").val();if (n == 1) {return false;}n--;$(this).siblings(".itxt").val(n);});
遍历元素
$(“div”).each(function(index,domEle) { xxx; })
1.each0方法遍历匹配的每一个元素。主要用DOM处理。each每一个
2.里面的回调函数有2个参数:index是每个元素的索引号; domEle是每个DOM元素对象,不是jquery对象
3.所以要想使用jquery方法,需要给这个dom元素转换为jquery对象$(domEle)
$(function () {var arr = ["red", "blue", "pink", "hotpink", "green"]$("span").each(function (i, domEle) {$(domEle).css("background-color", arr[i])})
$.each(object,function(index,element){ xxx; })
1.$.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
2.里面的函数有2个参数:index是每个元素的索引号; element遍历内容
$(function () {$.each({name: "andy",age: 18}, function (i, ele) {console.log(i);console.log(ele);})
| 内部添加 | 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( ) | 获取元素被卷去的头部和左侧 |
//动画返回顶部$(".back").click(function () {$("body,html").stop().animate({scrollTop: 0});})
动画电梯导航栏
$(".fixedtool li").click(function () {var current = $(".floor .w").eq($(this).index()).offset().top;$("body,html").stop().animate({scrollTop: current});})
滚到哪个模块哪个模块变色
// 滚到哪个模块哪个模块变色$(".floor .w").each(function (i, ele) {if ($(document).scrollTop() >= $(ele).offset().top) {console.log(i);$("fixedtool li").eq(i).addClass("current").siblings().removeClass();}})
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请求 |
$(document).ready(function() {var str=''$.ajax({url: "https://cnodejs.org/api/v1/topics",type: "GET",data: {page: 1,limit: 40},success: function(res) {console.log(res)for(var i=0; i<res.data.length; i++) {str+=`<li>${res.data[i].title}</li>`}$("ul").html(str)},fail: function(err) {console.log(err)}})})
// 按下回车读取本地存储数控
load();// 按下回车读取本地存储数控// 存储的数据格式 var todolist = [{ tltle: "xxx", done: false }]$("#title").on("keydown", function (event) {if (event.keyCode === 13) {var local = getDate();console.log(local);local.push({ title: $(this).val(), done: false });saveData(local);load();}});//读取本地存储的数据function getDate() {var data = localStorage.getItem("todolist");if (data != null) {return JSON.parse(data);} else {return [];}}// 保存本地存储数据function saveDate(data) {localStorage.setItem("todolist", JSON.stringify(data));}// toDolist本地存储数据渲染到加载页面// 渲染加载数据function load() {// 读取本地存储的数据var data = getDate();// 遍历之间先清空ol里面的元素内容$("ol").empty();$.each(data, function (i, n) {$("ol").prepend("<li>+n.title+</li>")})}
