jQuery练习
练习一:爱好选择器
$(function () {
//1.点击全选
var $checkedAllBox = $('#checkedAllBox')
var $checkedAllBtn = $('#checkedAllBtn')
var $items = $(':checkbox[name=items]')
$checkedAllBtn.click(function () {
$items.prop('checked',true)
$checkedAllBox.prop('checked',true)
})
//2.点击全不选
var $checkedNoBtn = $('#checkedNoBtn')
$checkedNoBtn.click(function () {
$items.prop('checked',false)
$checkedAllBox.prop('checked',true)
})
//3.反选
var $checkedRevBtn = $('#checkedRevBtn')
$checkedRevBtn.click(function () {
$items.each(function () {
this.checked = !this.checked
})
$checkedAllBox.prop('checked',$items.filter(':not(:checked)').length===0)
})
//4.提交
var $sendBtn = $('#sendBtn')
$sendBtn.click(function () {
$items.each(function () {
if(this.checked){
console.log(this.value)
}
})
})
//5.全选/全不选
$checkedAllBox.click(function () {
$items.prop('checked',this.checked)
})
//6.点击爱好,更新全选/全不选状态
$items.click(function () {
$checkedAllBox.prop('checked',$items.filter(':not(:checked)').length===0)
})
})
练习二:添加删除记录
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script src="jquery-3.4.0.min.js" type="text/javascript"></script>
<script type="text/javascript">
/**
* 1.添加
* 2.删除
*/
$(function () {
$('#addEmpButton').click(function () {
//1.收集输入的数据
var $name = $('#name')
var $email = $('#email')
var $salary = $('#salary')
var name = $name.val()
var email = $email.val()
var salary = $salary.val()
//2.生成对应的<tr>标签结构,并插入#emplyeeTable中
$('<tr></tr>').append('<td>'+ name +'</td>')
.append('<td>'+ email +'</td>')
.append('<td>'+ salary +'</td>')
.append('<td><a href="">delete</a></td>')
.appendTo('#employeetable>tbody')
.find('a').click(clickDelete)
//3.清除输入
$name.val('')
$email.val('')
$salary.val('')
})
//给所有删除链接绑定点击监听
$('#employeetable a').click(clickDelete)
//$('#employeetable').delegate('a','click',clickDelete
//删除函数
function clickDelete() {
var $tr = $(this).parent().parent()
var name = $tr.children(':first').html()
if(confirm('确定删除'+ name +'吗')){
$tr.remove()
}
return false
}
})
</script>
</head>
<body>
<br><br>添加新员工<br><br>
name:<input type="text" name="name" id="name" >
email:<input type="text" name="email" id="email" >
salary:<input type="text" name="salary" id="salary">
<br><br>
<button id="addEmpButton">Submit</button>
<br><br>
<hr>
<br><br>
<table id="employeetable" border="1" cellpadding="5" cellspacing=0>
<tbody>
<tr>
<td>Name</td>
<td>Email</td>
<td>Salary</td>
<td> </td>
</tr>
<tr>
<td>Tom</td>
<td>tom@tom.com</td>
<td>5000</td>
<td><a href="">delete</a> </td>
</tr>
<tr>
<td>Jerry</td>
<td>jerry@tsohu.com</td>
<td>8000</td>
<td><a href="">delete</a> </td>
</tr>
</tbody>
</table>
</body>
</html>
练习三:图片轮播
$(function () {
/**
* 1.点击向右(左)的图标,平滑切换到下(上)一页
* 2.无限循环切换:第一页的上一页为最后页,最后一页的下一页是第一页
* 3.每隔3s自动滑动到下一页
* 4.当鼠标进入图片区域时,自动切换停止,当鼠标离开后,又开始自动切换
* 5.切换页面时,下面的圆点也同步更新
* 6.点击圆点图标切换到对应的页
*
* bug:快速点击时出现问题
*/
var $container = $('#container')
var $list = $('#list')
var $points = $('#pointsDiv')
var $prev = $('#prev')
var $next = $('#next')
var PAGE_WIDTH=600//页的宽度
var TIME =400//翻页的持续时间
var ITEM_TIME = 20//单元移动的间隔时间
var imgCount = $points.length
var index = 0//当前下标
var moving = false//标识是否正在翻页
//1.点击向右(左)的图标,平滑切换到下(上)一页
$prev.click(function () {
nextPage(false)
})
$next.click(function () {
nextPage(true)
})
//2.每隔3s自动滑动到下一页
var intervalId= setInterval(function () {
nextPage(true)
},1000)
//3.当鼠标进入图片区域时,自动切换停止,当鼠标离开后,又开始自动切换
$container.hover(function () {
//清除定时器
clearInterval(intervalId)
},function () {
intervalId= setInterval(function () {
nextPage(true)
},1000)
})
//6.点击圆点图标切换到对应的页
$points.click(function () {
//目标页的下标
var targetIndex = $(this).index()
//只有当点击的不是当前页的圆点时才翻页
if (targetIndex != index){
nextPage(targetIndex)
}
})
/**
* 平滑翻页
* @param next
* true:下一页
* false:上一页
* 数值:指定下标页
*/
function nextPage(next) {
/*
总的偏移量:offset
总的时间:TIME=400
单元移动的间隔时间:ITEM_TIME =20
单元移动的偏移量:itemOffset = offset/(TIME/ITEM_TIME)
*/
//如果正在翻页,直接结束
if (moving){
return
}
moving = true//标识正在翻页
//总的偏移量:offset
var offset = 0
if (typeof next === 'boolean'){
offset = next ? -PAGE_WIDTH:PAGE_WIDTH
} else {
offset = -(next-index)*PAGE_WIDTH
}
//计算单位移动的偏移量:itemOffset
var itemOffset = offset/(TIME/ITEM_TIME)
//得到当前left值
var currLeft = $list.position().left
//计算出目标处的left值
var targetLeft = currLeft + offset
//启动循环定时器不断更新$list的left,到达目标处停止定时器
var intervalId = setInterval(function () {
//计算最新的currleft
currLeft +=itemOffset
if (currLeft === targetLeft){//到达目标位置
//清除定时器
clearInterval(intervalId)
//标识翻页停止
moving = false
//如果到达了最右边的图片(1.jpg),跳转到最左边的第2张图片(1.jpg)
if (currLeft===-(imgCount+1)*PAGE_WIDTH){
currLeft = -PAGE_WIDTH
}else if (currLeft===0){
//如果到达了最左边的图片(5.jpg),跳转到最右边的倒数第2张图片(5.jpg)
currLeft = -imgCount * PAGE_WIDTH
}
}
$list.css('left',currLeft)
},ITEM_TIME)
//更新圆点
updatePoints(next)
}
/**
* 更新圆点
* @param next
*/
function updatePoints(next) {
//计算目标圆点的下标targetIndex
var targetIndex = 0
if (typeof next === 'boolean'){
if (next){
targetIndex = index + 1
if (targetIndex === imgCount){
targetIndex = 0
}
} else{
targetIndex = index - 1
if (targetIndex === -1){
targetIndex = imgCount-1
}
}
}else {
targetIndex = next
}
//将当前index的<span>class的on移除
$points.eq(index).removeClass('on')
//给目标圆点添加class='on'
$points.eq(targetIndex).addClass('on')
//将index更新为targetIndex
index = targetIndex
}
})