1.jQuery动画
1.1 jQuery显示与隐藏效果
1⃣️show([speed,[easing],[fn]])
2⃣️hide([speed,[easing],[fn]])
3⃣️toggle([speed,[easing],[fn]])
- 参数都可以省略,无动画直接显示。
- speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
- easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
- fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
div{
width: 300px;
height: 500px;
background:pink;
display: none;
}
<button>显示</button>
<button>隐藏</button>
<button>切换</button>
<div></div>
$('button').eq(0).click(function(){
$('div').show(1000,function(){
alert(1)
})
})
$('button').eq(1).click(function(){
$('div').hide(1000)
})
$('button').eq(2).click(function(){
$('div').toggle(1000)
})
//一般情况下不给参数
1.2 jQuery滑动效果及切换hover
1⃣️slideDown([speed,[easing],[fn]])
2⃣️slideUp([speed,[easing],[fn]])
3⃣️slideToggle([speed,[easing],[fn]])
- 参数都可以省略,无动画直接显示。
- speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
- easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
- fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
div{
width: 300px;
height: 500px;
background:pink;
display: none;
}
<button>下拉滑动</button>
<button>上拉滑动</button>
<button>切换滑动</button>
<div></div>
$('button').eq(0).click(function(){
$('div').slideDown(1000,function(){
alert(1)
})
})
$('button').eq(1).click(function(){
$('div').slideUp(1000)
})
$('button').eq(2).click(function(){
$('div').slideToggle(1000)
})
//一般情况下不给参数
4⃣️事件切换 hover 就是鼠标经过和离开的复合写法
$('.nav li').hover(function(){
$(this).children('ul').slideDown(200);
},function(){
$(this).children('ul').slideUp(200);
})
5⃣️事件切换 hover 如果只写一个函数,那么鼠标和离开都会触发这个函数
$('.nav li').hover(function(){
$(this).children('ul').slideToggle(200);
})
1.3 动画队列及其停止排队方法
1⃣️动画或效果队列
动画或效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。
//stop 必须写在动画的前面
$('.nav li').hover(function(){
$(this).children('ul').stop().slideToggle(200);
})
1.4 jQuery淡入淡出
1⃣️fadeIn([speed,[easing],[fn]])
2⃣️fadeOut([speed,[easing],[fn]])
3⃣️fadeToggle([speed,[easing],[fn]])
//修改透明度4⃣️fadeTo([speed],opacity,[easing],[fn]])
- 参数都可以省略,无动画直接显示。
- speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
- easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
- fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
-
opacity:透明度必须写,取值0~1之间;
speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
div{
width: 300px;
height: 500px;
background:pink;
display: none;
}
<button>淡入效果</button>
<button>淡出效果</button>
<button>淡入淡出切换</button>
<button>修改透明度</button>
<div></div>
$('button').eq(0).click(function(){
$('div').fadeIn(1000,function(){
alert(1);
})
})
$('button').eq(1).click(function(){
$('div').fadeOut(1000);
})
$('button').eq(2).click(function(){
$('div').fadeToggle(1000);
})
$('button').eq(3).click(function(){
//透明度和速度必须写;
$('div').fadeTo(1000,0.5);
})
//一般情况下不给参数
1.5 jQuery自定义动画
1⃣️animate(params,[speed,[easing],[fn]])
- params: 想要更改的样式属性,以对象形式传递,必须写。属性名可以不用带引号,
- speed:三种预定速度之一的字符串('slow','normal',or 'fast') 或表示动画时长的毫秒数值(如:1000).
- easing:(optional)用来指定切换效果,默认是'swing',可用参数 'linear'.
- fn:回调函数,在动画完成时执行的函数,每个元素执行一次。
div{
width: 200px;
height: 200px;
background:pink;
position: absolute;
}
<button>动起来</button>
<div></div>
$('button').click(function(){
$('div').animate({
left:200,
top:300,
opacity:0.4,
width:500
},500)
})
2.jQuery实现购物车案例
2.1 jQuery属性操作
1⃣️设置或获取元素固有属性值prop()
所谓元素固有属性就是元素本身自带的属性,比如<a>元素里面的href,比如<input>元素里面的type。
<a href='http://www.aa.cn' title='good'></a>
<div index=1></div>
<span data-index=1>123</span>
//1.element.prop('属性名') 获取元素固有的属性值
//获取元素固有属性值
($('a').prop('href'));
//设置元素固有属性值
($('a').prop('href','http://www.bb.cn'));
//2.元素的自定义属性,我们通过attr()
//获取元素自定义属性值
($('div').attr('index'));
//设置元素自定义属性值
($('div').attr('index','4');
//3.数据缓存 data() 这个里面的数据是存放在元素的内存里
//设置元素内存属性值
$('span').data('uname','andy');
//获取元素内存属性值
$('span').data('uname');
//这个方法获取data-index h5 自定义属性 第一个 不用写data- 而且返回的是数字型
$('span').data('index');
2.2 购物车模块-全选
全选 全不选功能
$(function(){
//就是把全选按钮(checkall)的状态赋值给 三个小的按钮(j-checkbox)就可以了
//事件可以用change
$(.checkall).change(function(){
//console.log($(this).prop('checked'));
$(".j-checkbox,.checkall").prop("checked",$(this).prop("checked"));
})
//如果小复选框被选中的个数等于3(随长度而来) 就应该把全选按钮选上,否则全选按钮不选
$('.j-checkbox').change(function(){
if($('j-checkbox:checked').length===$('j-checkbox').length){
$('.checkall').prop('checked',true);
}else{
$('.checkall').prop('checked',false);
}
})
})
2.3 jQuery内容文本值
1⃣️普通元素内容 html() (相当于原生innerHTML)
html( ) //获取元素的内容
html('内容') //设置元素的内容
2⃣️普通元素文本内容 text() (相当于原生innerText)
text( ) //获取元素的内容
text('内容') //设置元素的内容
3⃣️普通元素表单值 val() (相当于原生value)
val( ) //获取元素的内容
val('内容') //设置元素的内容
2.4 购物车模块-增减商品数量
$(function(){
//增减商品数量,模块 首先声明一个变量,当我们点击+号increment,就让这个值++,然后赋值给文本框
$('.increment').click(function(){
//得到当前兄弟文本框的值
var n =$(this).siblings('.itext').val();
n++;
$(this).siblings('.itext').val(n);
})
$('.decrement').click(function(){
//得到当前兄弟文本框的值
var n =$(this).siblings('.itext').val();
if(n==1){
return false;
}
n--;
$(this).siblings('.itext').val(n);
})
})
2.5 购物车模块-修改商品小计(价格)
toFixed(2) 保留两位小数
$(function(){
//增减商品数量,模块 首先声明一个变量,当我们点击+号increment,就让这个值++,然后赋值给文本框
$('.increment').click(function(){
//得到当前兄弟文本框的值
var n =$(this).siblings('.itext').val();
n++;
$(this).siblings('.itext').val(n);
//计算小计模块,根据文本框的值 乘以 当前商品的价格 就是商品的小计
//当前商品的价格
var p =$(this).parent().parent().siblings('.p-price').html();
//截取掉人民币符号¥
p = p.substr(1);
//小计模块
$(this).parent().parent().siblings('.p-sum').html('¥'+(p*n).toFixed(2));
})
$('.decrement').click(function(){
//得到当前兄弟文本框的值
var n =$(this).siblings('.itext').val();
if(n==1){
return false;
}
n--;
$(this).siblings('.itext').val(n);
//计算小计模块,根据文本框的值 乘以 当前商品的价格 就是商品的小计
//当前商品的价格
var p =$(this).parent().parent().siblings('.p-price').html();
//截取掉人民币符号¥
p = p.substr(1);
//小计模块
$(this).parent().parent().siblings('.p-sum').html('¥'+p*n).toFixed(2));;
})
})
2.6 用户修改文本框的值计算 小计模块
$(function(){
$('.itxt').change(function(){
//先得到文本框里面的值,乘以 当前商品的单价
var n = $(this).val
//当前商品的价格
var p =$(this).parents('.p-num').siblings('.p-price').html();
//截取掉人民币符号¥
p = p.substr(1);
$(this).parent().parents('.p-num').siblings('.p-sum').html('¥'+(p*n).toFixed(2));
})
})
2.7 购物车模块-计算总件数和总额
$(function(){
function getSum(){
var count=0;//计算总件数
var money=0;//计算总价钱
$('.itxt').each(function(i,ele){
count +=parseInt($(ele).val());
})
$('.amount-sum em').text(count);
$('.p-sum').each(function(i,ele){
money +=parseFloat($(ele).text().substr(1));
})
$('.price-sum em').text('¥'+money.toFixed(2));
}
})
2.8 创建,添加,删除元素
//1.创建元素
var li = $('<li>我是后来创建的li</li>');
//2.添加元素
//a.内部添加
$('ul').append(li);//内部添加并且放到内容的最后面
$('ul').prepend(li);//内部添加并且放到内容的最前面
//b.外部添加
var div = $('<div>我是后面创建的li</div>')
$('.test').after(div)
$('.test').before(div)
//c.删除元素
$('ul').remove();//可以删除匹配的元素,自杀
$('ul').empty();//可以删除匹配的元素里面的子节点 孩子
$('ul').html('');//可以删除匹配的元素里面的子节点 孩子
2.9 jQuery尺寸方法
//1.取得匹配元素宽度和高度值 只算 width / height
width( ) /height( )
//2.取得匹配元素宽度和高度值 包含padding
innerWidth( ) /innerHeight( )
//3.取得匹配元素宽度和高度值 包含padding,border
outerWidth( ) /outerHeight( )
//4.取得匹配元素宽度和高度值 包含padding,border,margin
outerWidth( true ) /outerHeight( true )
a .以上参数为空,则是获取相应值,返回的是数字型
b .如果参数为数字,则是修改相应值
c .参数可以不必写单位
2.10 jQuery位置方法
//1.offset( ) 设置或获取元素偏移
1⃣️offset( ) 方法设置或返回被选元素相对于文档的偏移坐标,跟父级没有关系;
2⃣️该方法有两个属性left,top.
offset( ).top 用于获取距离文档顶部的距离,
offset( ).left 用于获取距离文档左侧的距离,
3⃣️可以设置元素的偏移: offset({top:10,left:30});
//2.获取距离带有定位父级位置(偏移) position 如果没有带有定位的父级,则以文档为准
//这个方法只能获取不能设置偏移
$('.son').position({
top:200,
left:200
})
//3.scrollTop( )/scrollLeft( ) 设置或获取元素被卷去的头部和左侧
1⃣️scrollTop( )方法设置或返回被选元素被卷去的头部
$(function( ){
//被卷去的头部 scrollTop( ) /被卷去的左侧 scrollLeft( )
//页面滚动事件
$(window).scroll(function(){
var boxTop = $('.container').offset( ).top;
if($(document).scrollTop( )>=boxTop){
$('.back').fadeIn();
}else{
$('.back').fadeOut();
};
})
})
2.11 带有动画的返回顶部
1⃣️.核心原理:使用animate 动画返回顶部
2⃣️.animate 动画函数里面有个scrollTop 属性,可以设置位置
3⃣️.但是是元素做动画,因此$('body,html').animate({scrollTop:0})
$('.back').click(function(){
$('body,html').animate({
scrollTop:0
})
})
3.jQuery实现电梯导航案例
3.1 显示隐藏电梯导航
当我们滚动到某指定模块时,就让电梯导航显示出来
$(function(){
var toolTop = $('.recomend').offset().top;
$(window).scroll(function(){
if($(document).scrollTop()>=toolTop){
$('.fixedtool').fadeIn();
}else{
$('.fixedtool').fadeOut();
}
})
})
3.2 点击滚动目标位置
点击电梯导航页面可以滚动到相应内容区域
核心算法:导航和内容一一对应
$(function(){
$('.fixedtool li').click(function(){
console.log($(this).index());
//当我们每次点击小li 就需要计算出页面要去往的位置
//选出对应索引号的内容区的盒子,计算它的.offset().top
var current = $('.floor .w').eq($(this).index()).offset().top;
//页面动画滚动效果
$("body,html").stop().animate({
scrollTop:current;
}
})
})
3.3 点击当前li添加current类
$(function(){
var toolTop = $('.recomend').offset().top;
toggleTool()
//封装显示隐藏的函数
function toggleTool(){
if($(document).scrollTop()>=toolTop){
$('.fixedtool').fadeIn();
}else{
$('.fixedtool').fadeOut();
}
}
$(window).scroll(function(){
toggleTool()
})
$('.fixedtool li').click(function(){
console.log($(this).index());
//当我们每次点击小li 就需要计算出页面要去往的位置
//选出对应索引号的内容区的盒子,计算它的.offset().top
var current = $('.floor .w').eq($(this).index()).offset().top;
//页面动画滚动效果
$("body,html").stop().animate({
scrollTop:current;
});
//点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
$(this).addClass('current').siblings().removeClass()
})
})
3.4 滑动页面电梯导航自动添加current类
$(function(){
var toolTop = $('.recomend').offset().top;
toggleTool()
//封装显示隐藏的函数
function toggleTool(){
if($(document).scrollTop()>=toolTop){
$('.fixedtool').fadeIn();
}else{
$('.fixedtool').fadeOut();
}
}
$(window).scroll(function(){
toggleTool();
//当页面滚动到某个内容区域,左侧电梯导航小li 相应添加和删除 current类名
$('.floor .w').each(function(i,ele){
if($(document).scrollTop()>=$(ele).offset().top){
console.log(i)
$('.fixedtool li').eq(i).addClass("current").siblings().removeClass("current");
}
})
})
$('.fixedtool li').click(function(){
console.log($(this).index());
//当我们每次点击小li 就需要计算出页面要去往的位置
//选出对应索引号的内容区的盒子,计算它的.offset().top
var current = $('.floor .w').eq($(this).index()).offset().top;
//页面动画滚动效果
$("body,html").stop().animate({
scrollTop:current;
});
//点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
$(this).addClass('current').siblings().removeClass()
})
})
3.5 节流阀(互斥锁)(修复)
$(function(){
//当我们点击了小 li 此时不需要执行页面滚动事件里面的li 的背景选择 添加current
//节流阀 互斥锁
var flag =true;
//1.显示隐藏电梯导航
var toolTop = $('.recomend').offset().top;
toggleTool()
//封装显示隐藏的函数
function toggleTool(){
if($(document).scrollTop()>=toolTop){
$('.fixedtool').fadeIn();
}else{
$('.fixedtool').fadeOut();
}
}
$(window).scroll(function(){
toggleTool();
//3.当页面滚动到某个内容区域,左侧电梯导航小li 相应添加和删除 current类名
if(flag){
$('.floor .w').each(function(i,ele){
if($(document).scrollTop()>=$(ele).offset().top){
console.log(i)
$('.fixedtool li').eq(i).addClass("current").siblings().removeClass("current");
}
})
}
})
//2.当我们每次点击小li 就需要计算出页面要去往的位置
$('.fixedtool li').click(function(){
flag=false;
console.log($(this).index());
//选出对应索引号的内容区的盒子,计算它的.offset().top
var current = $('.floor .w').eq($(this).index()).offset().top;
//页面动画滚动效果
$("body,html").stop().animate({
scrollTop:current;
},function(){
flag=true;
});
//点击之后,让当前的小li 添加current 类名,姐妹移除current 类名,姐妹移除current
$(this).addClass('current').siblings().removeClass()
})
})
4.jQuery事件绑定和解绑
4.1 事件处理on() 绑定事件
优势:a . on() 方法在匹配元素上绑定一个或多个事件的事件处理函数
$('div').on({
mouseenter:function(){
$(this).css('background','skyblue');
},
click:function(){
$(this).css('background','pink');
}
})
$('div').on('mouseenter,mouseleave',function(){
$(this).toggleClass('current');
})
优势:b . on() 方法可以事件委派操作,事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把事件委托给父元素;
$('ul').on('click','li',function(){
alert('tangtang')
})
优势:c . 动态创建的元素,click() 没有办法绑定事件,on()可以给动态生存的元素绑定事件;
$('ul').on('click','li',function(){
alert('tangtang')
})
var li = $('<li>我是后来创建的</li>');
4.2 事件处理off() 解绑事件
off()方法可以移除通过 on()方法添加的事件处理程序
$('p').off()// 解绑p 元素所有事件处理程序;
$('p').off('click')// 解绑p 元素上面的点击事件 后面的foo 是侦听函数名;
$('ul').off('click','li')//解绑事件委托
如果有的事件只想触发一次,可以使用one()来绑定事件;
$('p').one('click',function(){
alert(11)
})
4.3 自动触发事件 trigger()
1.元素.事件()
$('p').click();
2.元素.trigger('事件')
$('div').trigger('click');
3.元素.triggerHandler('事件'),不会触发元素的默认行为
$('div').triggerHandler('click');
5.jQuery对象拷贝
$.extend([deep],target,object1,[objectN])
- 1.deep: 如果设为true 为深拷贝,默认false 浅拷贝
- 2.target: 要拷贝的目标对象
- 3.object1:待拷贝到第一个对象的对象
- 4.浅拷贝
$.extend(target,obj);
//浅拷贝把原来对象里面的复杂数据类型地址拷贝给目标对象,会覆盖原来的
$.extend(true,target,obj);
//深拷贝把里面的数据完全复制一份给目标对象,如果里面有不冲突的属性,会合并到一起
6.jQuery多库共存
- 1.如果$ 符号冲突 我们使用 jQuery
- 2.让jquery 释放对$ 控制权, 让用户自己决定
var suibian = jQuery.noConflict();
7.Dom对象与jQuery对象的互转
a.Dom对象转换为jQuery对象
1⃣️直接获取视频,得到就是jQuery对象
$('video');
2⃣️我们已经使用原生js,获取过来 Dom对象
var myvide = document.querySelector('video');
$(myvideo);
b.jQuery对象转换为Dom对象(两种方法)
$('div')[index] //index 是索引号
$('div').get(index) //index 是索引号
$('video')[0].play();
$('video').get(0).play();
8.jQuery事件插件的使用
- 1.瀑布流
- 2.图片懒加载
- 3.全屏滚动 http://www.dowebok.com/demo/2014/77/
- 4.bootstrap组件
- 5.bootstrapJS组件
9.jQuery实现todoList案例
todoList 案例分析
- 1.刷新页面不会丢失数据,因此需要用到本地存储 localStorage
- 2.核心思路:不管按下回车,还是点击复选框,都是把本地存储的数据加载到页面中,这样保证刷新关闭页面不会丢失数据
- 3.存储的数据格式:var todolist =[{title:'xxx',done:false}]
- 4.注意点:
a.本地存储localStorage里面只能存储字符串格式,因此需要把对象转换为字符串JSON.stringify(data)
b.获取本地存储的数据,我们需要把里面的字符串数据转换为 对象格式 JSON.parse(),我们才能使用里面的数据;
localStorage.setItem('todo',JSON.stringify(todolist));
var data = localStorage.getItem('todo');
data=JSON.parse(data);
todoList 按下回车把新数据添加到本地存储里面
- 1.切记:页面中的数据,都要从本地存储里面获取,这样刷新页面不会丢失数据,所以要先把数据保存到本地存储里面;
- 2.利用事件对象.keyCode判断用户按下回车键(13)
- 3.声明一个数组,保存数据
- 4.先要读取本地存储原来的数据(声明函数getData()),放到这个数组里面
- 5.之后把最新从表单获取过来的数据,追加到数组里面
- 6.最后把数组存储给本地存储(声明函数savaDate())
$(function(){
//键盘按下事件
$('#title').on('keydown',function(event){
if(event.keyCode===13){
//先要读取本地存储原来的数据
var local = getDate();
//把local数组进行更新数据,把最新的数据追加给local数组;
local.push({title:$(this).val(),done:false});
//把这个数组local 存储到本地存储
saveDate(loacl);
//本地存储数据渲染加载到页面
load();
}
})
//读取本地存储的数据
function getDate(){
var data = localStroge.getItem('todolist');
if(data !==null){
//本地存储里面的数据是字符串格式的,但是我们需要的是对象格式的
return JSON.parse(data)
}else{
return [];
}
}
//保存本地存储数据
function saveDate(data){
localStroge.setItem('todolist',JSON.stringify(data));
}
//渲染加载数据
function load(){
//读取本地存储的数据
var data = getDate();
//遍历之前先要清空ol里面的元素内容
$("ol").empty();
//遍历这个数据
$.each(data,function(i,n){
$('ol').prepend('<li> <input type="checkbox" > <p></p> <a href="javascriot:;">
</a></li>')
})
}
})
todoList 本地存储数据渲染加载到页面
- 1.因为后面也会经常渲染加载操作,所以声明一个函数load,方便后面调用
- 2.先读取本地存储数据(数据不要忘记转换为对象格式)
- 3.之后遍历这个数据($.each()),有几条数据,就生存几个小li 添加到ol里面
- 4.先要读取本地存储原来的数据(声明函数getData()),放到这个数组里面
- 5.之后把最新从表单获取过来的数据,追加到数组里面
- 6.最后把数组存储给本地存储(声明函数savaDate())
代码如上