文章目录
- 一、jQuery
- 二、入口函数
- 三、选择器
- 选择器小结 ★
- 全部选择器参考 ☆
- 四、常用的 jQuery 事件方法
- 事件写法
- 鼠标事件
- 元素事件
- 键盘事件
- 文档/窗口事件
- 全部事件方法参考 ☆
- 五、效果事件
- 显示与隐藏:hide,show,toggle
- 淡入和淡出:fadeIn(),fadeOut(),fadeToggle(),fadeTo()
- 滑动:slideDown(),slideUp(),slideToggle()
- 自定义动画:animate()
- 停止动画:stop()
- jQuery - 链(Chaining):在相同的元素上运行多条 jQuery 命令
- 全部效果事件参考 ☆
- 杂学
一、jQuery
1.jQuery是一个JavaScript函数库(框架)。
2.jQuery是一个轻量级的"写的少,做的多"的JavaScript库。
3.jQuery库包含以下功能:
- HTML 元素选取
- HTML 元素操作
- CSS 操作
- HTML 事件函数
- JavaScript 特效和动画
- HTML DOM 遍历和修改
- AJAX
- Utilities
提示: 除此之外,Jquery还提供了大量的插件。
4.jQuery是目前最流行的js框架,而且提供了大量的扩展。
5.jQuery 拥有可操作 HTML 元素和属性的强大方法,就是操作 DOM 的能力。
6. ‘$’ 是 jQuery 的简称,可以使用 $,也可以使用 jQuery
二、入口函数
jQuery 入口函数:
在 html 所有标签(DOM)都加载之后,就会去执行。
$(document).ready(function(){// 执行代码
});
或者
$(function(){// 执行代码
});
JavaScript 入口函数:
等到所有内容,包括外部图片之类的文件加载完后,才会执行。
window.onload = function () {// 执行代码
}
三、选择器
- jQuery 中所有选择器都以美元符号开头:$()
- jQuery 选择器基于元素的 id、类、类型、属性、属性值等"查找"(或选择)HTML 元素
- 元素选择器:$(“p”)
- id选择器:$("#test")
- 类选择器:$(".test")
- 进阶选择:
$("*") 选取所有元素
$(this) 选取当前 HTML 元素
$(“p.intro”) 选取 class 为 intro 的 p 元素
$(“p:first”) 选取第一个 p 元素
$(“ul li:first”) 选取第一个 ul 元素的第一个 li 元素
$(“ul li:first-child”) 选取每个 ul 元素的第一个 li 元素
$("[href]") 选取带有 href 属性的元素
$(“a[target=’_blank’]”) 选取所有 target 属性值等于 “_blank” 的 a 元素
$(“a[target!=’_blank’]”) 选取所有 target 属性值不等于 “_blank” 的 a 元素
$(":button") 选取所有 type=“button” 的 input 元素 和 button 元素
$(“tr:even”) 选取偶数位置的 tr 元素
$(“tr:odd”) 选取奇数位置的 tr 元素
选择器小结 ★
1.基本选择器
$("#id") // ID选择器
$("div") // 元素选择器
$(".classname") // 类选择器
$(".classname,.classname1,#id1") // 组合选择器2.层次选择器
$("#id>.classname ") // 子元素选择器
$("#id .classname ") // 后代元素选择器
$("#id + .classname ") // 紧邻下一个元素选择器
$("#id ~ .classname ") // 兄弟元素选择器3.过滤选择器(重点)
$("li:first") // 第一个li
$("li:last") // 最后一个li
$("li:even") // 挑选下标为偶数的li
$("li:odd") // 挑选下标为奇数的li
$("li:eq(4)") // 下标等于 4 的li(第五个 li 元素)
$("li:gt(2)") // 下标大于 2 的li
$("li:lt(2)") // 下标小于 2 的li
$("li:not(#runoob)") // 挑选除 id="runoob" 以外的所有li3.2内容过滤选择器
$("div:contains('Runob')") // 包含 Runob文本的元素
$("td:empty") // 不包含子元素或者文本的空元素
$("div:has(selector)") // 含有选择器所匹配的元素
$("td:parent") // 含有子元素或者文本的元素3.3可见性过滤选择器
$("li:hidden") // 匹配所有不可见元素,或type为hidden的元素
$("li:visible") // 匹配所有可见元素3.4属性过滤选择器
$("div[id]") // 所有含有 id 属性的 div 元素
$("div[id='123']") // id属性值为123的div 元素
$("div[id!='123']") // id属性值不等于123的div 元素
$("div[id^='qq']") // id属性值以qq开头的div 元素
$("div[id$='zz']") // id属性值以zz结尾的div 元素
$("div[id*='bb']") // id属性值包含bb的div 元素
$("input[id][name$='man']") //多属性选过滤,同时满足两个属性的条件的元素3.5状态过滤选择器
$("input:enabled") // 匹配可用的 input
$("input:disabled") // 匹配不可用的 input
$("input:checked") // 匹配选中的 input
$("option:selected") // 匹配选中的 option4.表单选择器
$(":input") //匹配所有 input, textarea, select 和 button 元素
$(":text") //所有的单行文本框,$(":text") 等价于$("[type=text]"),推荐使用$("input:text")效率更高,下同
$(":password") //所有密码框
$(":radio") //所有单选按钮
$(":checkbox") //所有复选框
$(":submit") //所有提交按钮
$(":reset") //所有重置按钮
$(":button") //所有button按钮
$(":file") //所有文件域
全部选择器参考 ☆
菜鸟教程 - 选择器
四、常用的 jQuery 事件方法
事件写法
$('selector').func(arg1,arg2,...);
// selector:某个元素
// func:事件函数
// arg1:参数,一般是事件函数的配置参数,和回调函数
eg:jQuery使用事件 —— 点击元素后隐藏该元素:
$("p").click(function(){$(this).hide();
});
-
$(document).ready(),等价 $() —— html 所有标签(DOM)都加载之后执行
-
获取事件对象,里面包含各种有用的信息:
$(document).ready(function(){$(window).keypress(function(event){ //获取事件对象,里面包含各种有用的信息。console.log(event);//console.log(event.which);}); });
鼠标事件
- click() —— 单机元素
- dblclick() —— 双击元素
- mouseenter() —— 当鼠标指针穿过元素时,会发生 mouseenter 事件。
- mouseleave() —— 当鼠标指针离开元素时,会发生 mouseleave 事件
- mousedown() —— 当鼠标指针移动到元素上方,并按下鼠标按键时,会发生 mousedown 事件
- mouseup() —— 当在元素上松开鼠标按钮时,会发生 mouseup 事件
- hover() ——光标悬停事件
元素事件
- focus() —— 元素(表单)获取焦点
- blur() —— 元素(表单)失去焦点
- change() —— 当元素的值改变时发生 change 事件(仅适用于表单字段)
- submit() —— 当提交表单时,会发生 submit 事件。该事件只适用于 form 元素。
键盘事件
-
keydown() —— 在键盘上按下某键时发生,一直按着则会不断触发(opera浏览器除外), 它返回的是键盘代码;
-
.keyup() —— 用户松开某一个按键时触发, 与keydown相对, 返回键盘代码
-
.keypress() —— 在键盘上按下一个按键,并产生一个字符时发生, 返回ASCII码。注意: shift、alt、ctrl等键按下并不会产生字符,所以监听无效 ,换句话说, 只有按下能在屏幕上输出字符的按键时keypress事件才会触发。若一直按着某按键则会不断触发。
拓: keypress事件获取键入字符$(window).keypress(function(event){//event.which是获取ASCII码,前面的函数是将ASCII码转换成字符,空格键和Enter键输出均为空白。console.log(String.fromCharCode(event.which));//从event对象中key属性获取字符,但是Enter键的key值为"Enter",空白键还是空白" "。console.log(event.key); });
文档/窗口事件
- load() —— 当指定的元素已加载时,会发生 load 事件。该方法在 jQuery 版本 1.8 中已废弃。
- resize() —— 当调整浏览器窗口大小时,发生 resize 事件。
- scroll() —— 当用户滚动指定的元素时,会发生 scroll 事件。
- unload() —— Firefox 与 Chrome 会阻止弹窗,所以没办法看到效果。
当用户离开页面时,会发生 unload 事件。
当发生以下情况下,会触发 unload 事件:
点击某个离开页面的链接
在地址栏中键入了新的 URL
使用前进或后退按钮
关闭浏览器窗口
重新加载页面
unload() 方法规定当 unload 事件发生时会发生什么。
unload() 方法只应用于 window 对象。
注意:unload 事件在不同浏览器中效果不一样,请确保使用前在所有浏览器测试该方法。unload() 方法在 jQuery 版本 1.8 中被废弃,在 3.0 版本被移除。
全部事件方法参考 ☆
菜鸟教程 - 事件方法
五、效果事件
-
显示与隐藏:hide,show,toggle
$(selector).hide(speed,callback); 隐藏元素
$(selector).show (speed,callback); 显示元素
$(selector).toggle(speed,callback); 切换元素的显示/隐藏状态
可选参数:
speed —— 执行时间(slow,fast,ms)
callback —— 回调函数
细节:
1.(selector)选中的元素的个数为n个,callback 函数不加括号时则callback函数会执行n次;当 callback 函数加上括号时,函数立即执行,只会调用一次
2.callback函数名后加括号,会立刻执行函数体,而不是等到显示/隐藏完成后才执行;
3.callback既可以是函数名,也可以是匿名函数; -
淡入和淡出:fadeIn(),fadeOut(),fadeToggle(),fadeTo()
$(selector).fadeIn(speed,callback); 淡入已隐藏的元素
$(selector).fadeOut(speed,callback); 淡出可见元素
$(selector).fadeToggle(speed,callback); 切换淡入、淡出状态
$(selector).fadeTo(speed,opacity,callback); 渐变为给定的不透明度
可选参数:
speed —— 执行时间(slow,fast,ms)
callback —— 回调函数
opacity —— 透明度(值介于 0 与 1 之间)
细节:
fadeTo() 没有默认参数,必须加上 slow/fast/ms(时间,单位是毫秒) -
滑动:slideDown(),slideUp(),slideToggle()
$(selector).slideDown(speed,callback); 向下滑动(显示)
$(selector).slideUp(speed,callback); 向上滑动(隐藏)
$(selector).slideToggle(speed,callback); 切换状态
可选参数:
speed —— 执行时间(slow,fast,ms)
callback —— 回调函数 -
自定义动画:animate()
animate 方法允许你创建自定义的动画:
$(selector).animate({params},speed,easing,callback);
Alternate 语法(另一种传参):
(selector).animate({styles},{options})必选参数:
{params} —— 必选参数,用于形成具体的css样式,可以是一个或多个样式
可选参数:
easing —— 规定在动画的不同点中元素的速度。默认值是 “swing”。可选:
“swing” - 在开头/结尾移动慢,在中间移动快
“linear” - 匀速移动
speed,callback —— 同上
实例:$("button").click(function(){$("div").animate({left:'250px', // 新的左边距height:'toggle', // 以高度为基准切换显示状态width:'+=150px' // 增宽150px});});$("button").click(function(){var div=$("div");div.animate({left:'100px'},"slow");div.animate({fontSize:'3em'},"slow");});
细节:
1、position :默认情况下,所有 HTML 元素都有一个静态位置,且无法移动。如需对位置进行操作,要记得首先把元素的 CSS position 属性设置为 relative、fixed 或 absolute!
2、 Camel 标记法:当使用 animate() 设置元素新位置样式时(通过传参),必须使用 Camel 标记法书写所有的属性名,比如,必须使用 paddingLeft 而不是 padding-left等等。此方法几乎可以设置所有的样式。
3、色彩动画:色彩动画并不包含在核心 jQuery 库中。如果需要生成颜色动画,您需要从 jquery.com 下载 颜色动画 插件。
4、定义相对值:(该值相对于元素的当前值)。需要在值的前面加上 += 或 -=。比如让元素变高10个像素:height:’+=10px’
5、使用预定义的值: “show”、“hide” 或 “toggle”,达到显示、隐藏功能。slow,fast已经被预定为某个具体的值(xx毫秒),用这些预定义的值和直接用数值实际是一样的。
6、队列执行:同时使用多个animate()方法,jQuery会自动调用Queue队列的接口把他们放在队列中以此执行,Queue队列的接口是是内部专门为动画服务的。
原因:JavaScript编程几乎总是伴随着异步操作:setTImeout,css3Transition/Animation,ajax,dom的绘制,postmessage,web Database 等等,队列允许一系列函数被异步地调用而不会阻塞程序,在异步中保持同步(进程锁)。
7、深究动画的队列执行:- 通过多个 animate 方法形成动画链,那么这个动画链其实都是会加入到 queue 队列里面。
- 在每一次 queue 方法中会把动画数据写到队列中,然后取出队列中的第一个序列通过 dequeue 方法执行。
- 开始执行之前写一个进程锁“inprogress”到 queue 里面,代表这个动画还在执行中,防止同个序列的多个动画重复执行,这个就是异步执行同步收集的处理方案。
- 此时动画开始了,这里注意动画是在异步执行的同步的代码,继续调用下一个 animate。
- 执行同样的 animate 方法逻辑但是此时问题来了,动画可能还在执行可是后续的 animate 还在继续调用,所以这个时候后面的动画代码就需要等待了(进程锁)。
- 队列头是有一把“inprogress”进程锁的,那么这时候动画只需要加入队列,但是可以通过 inprogress 是否存在来判断是否执行。
- 所有的 animate 方法在加入队列都是按照以上的逻辑依次执行,动画执行完毕了就会有一个结束通知,然后从 queue 取出第一个队列继续执行了,如此循环。
以上是整个动画的调度一个流程,其实都是利用队列异步的空闲然后执行同步的代码,这样在处理上是没有浪费资源的,而且精确度也是最高的。
-
停止动画:stop()
$(selector).stop(stopAll,goToEnd); —— 停止滑动、淡入淡出和自定义动画
可选参数:
stopAll —— 是否应该清除动画队列。默认是 false,即仅停止活动的动画,允许任何排入队列的动画向后执行。
goToEnd —— 是否立即完成当前动画。默认是 false。
细节:被立即停止的动画不会触发回调,被立即完成的动画会触发回调。 -
jQuery - 链(Chaining):在相同的元素上运行多条 jQuery 命令
优点:浏览器就不必多次查找相同的元素
eg:p1标签依次执行css样式变化、向上隐藏、向下显示$("#p1").css("color","red").slideUp(2000).slideDown(2000);
全部效果事件参考 ☆
菜鸟教程 - 效果事件
杂学
1.jQuery维护: 如果网站包含许多页面,并且你希望你的 jQuery 函数易于维护,那么要把 jQuery 函数放到独立的 .js 文件中,通过src导入即可。
2.事件: 页面对不同访问者的响应叫做事件,jQuery 是为事件处理特别设计的。
3.事件处理: 程序指的是当 HTML 中发生某些事件时所调用的方法。
4. jQuery 动态生成元素: 对于由 jQuery 动态生成的元素,不能直接绑定常用的事件,如 click等。
eg:
$(".box ").click(function(){});
这样虽然产生了类box,但仍然没有点击事件,解决方案:
$(".box ").live('click', function(){}); // 不建议
// 或者:
$(".box ").on('click', function(){});
// 另外 click, blur, keyup, change等方法,都可以这样解决。