jQuery练习

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
    }
    
})

 

posted @ 2019-05-19 14:28  鸿森  阅读(163)  评论(0编辑  收藏  举报