0
点赞
收藏
分享

微信扫一扫

DOM的一些案例

非衣所思 2022-04-21 阅读 32
javascript

1、百度换肤效果

 案例分析:

  • 这个案例练习的是给一组元素注册事件
  • 给4个小图片利用循环注册点击事件
  • 当我们点击了这个图片,我们的页面背景改为当前的图片

核心算法:把当前图片的src路径取过来,给body做为背景即可

<head>    
    <style>
        *{
            padding: 0;
            margin: 0;
        }
        body {
            background: url(image/1.jpg) no-repeat center top;
        }
        li{
            list-style: none;
        }
        .baidu{
            overflow: hidden;
            margin: 100px auto;
            background-color: #fff;
            width: 410px;
            padding-top: 3px;
        }
        .baidu li{
            float: left;
            margin: 0 1px;
            cursor: pointer;
        }
        .baidu img{
            width: 100px;
        }
    </style>
</head>
<body>
    <div class="baidu">
        <ul>
            <li><img src="image/1.jpg" alt=""></li>
            <li><img src="image/2.jpg" alt=""></li>
            <li><img src="image/3.jpg" alt=""></li>
            <li><img src="image/4.jpg" alt=""></li>
        </ul>
    </div>
    <script>
        //1.获取元素
        var imgs = document.querySelector('.baidu').querySelectorAll('img');
        //2.循环注册事件
        for(var i = 0 ; i<imgs.length; i++){
            imgs[i].onclick=function(){
                //this.src 就是我们点击图片的路径 将它给body就可以了
                document.body.style.backgroundImage='url(' + this.src +' )';
            }
        }
    </script>
</body>

2、表格隔行变色效果

案例分析:

  • 用到新的鼠标事件 鼠标经过onmouseover 鼠标离开onmouseout
  • 核心思路:鼠标经过tr行 当前的行变背景颜色 鼠标离开就去掉当前的背景颜色
  • 注意:第一行(thead里面的行)不需要变换颜色 因此我们获取的是tbody里面的行
<head>
    <style>
        table{
            width: 800px;
            margin: 100px auto;
            text-align: center;
            border-collapse: collapse;
            font-size: 14px;
        }

        thead tr{
            height: 30px;
            background-color: skyblue;
        }

        tbody td{
            border-bottom: 1px solid #d7d7d7;
            color:blue;
        }

        .bg{
            background-color: pink;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th>代码</th>
                <th>名称</th>
                <th>最新公布净值</th>
                <th>累计净值</th>
                <th>前单位净值</th>
                <th>净值增长率</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>003526</td>
                <td>农行金穗3个月定期开放债券</td>
                <td>1.075</td>
                <td>1.079</td>
                <td>1.074</td>
                <td>+0.047%</td>
            </tr>
            <tr>
                <td>003526</td>
                <td>农行金穗3个月定期开放债券</td>
                <td>1.075</td>
                <td>1.079</td>
                <td>1.074</td>
                <td>+0.047%</td>
            </tr>
            <tr>
                <td>003526</td>
                <td>农行金穗3个月定期开放债券</td>
                <td>1.075</td>
                <td>1.079</td>
                <td>1.074</td>
                <td>+0.047%</td>
            </tr>
            </tbody>
    </table>
    <script>
        // 1.获取元素 获取的是tbody里面所以的行
        var trs = document.querySelector('tbody').querySelectorAll('tr');
        // 2.利用循环注册事件
        for(var i = 0; i<trs.length; i++){
            // 3.鼠标经过事件 onmouseover
           trs[i].onmouseover = function(){
            this.className = 'bg';
        } 
        // 4.鼠标离开事件 onmouseout
        trs[i].onmouseout = function(){
            this.className = '';
        } 
        }
    </script>
</body>

3、表单全选和取消全选

案例分析:

  • 全选和取消全选做法:让下面所有复选框的checked属性(选中状态)跟随全选按钮即可
  • 下面复选框需要全部选中,上面全选才能选中做法:给下面所有复选框绑定点击事件,每次点击,都要循环查看下面所有的复选框是否有没选中的,如果有一个没选中,上面全选就不选中。
<head>
    <style>
        table {
            width: 300px;
            margin: 100px auto;
            text-align: center;
            border-collapse: collapse;
        }

        thead tr {
            background-color: skyblue;
        }

        tbody td{
            border: 1px solid #dfdfdf;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th><input type="checkbox" id="j_cbAll"></th>
                <th>商品</th>
                <th>价格</th>
            </tr>
        </thead>
        <tbody id="j_tbs">
            <tr>
                <td><input type="checkbox"></td>
                <td>iphone8</td>
                <td>8000</td>
            </tr>
            <tr>
                <td><input type="checkbox"></td>
                <td>iPad Pro</td>
                <td>5000</td>
            </tr>
            <tr>
                <td><input type="checkbox"></td>
                <td>iPad Air</td>
                <td>2000</td>
            </tr>
            <tr>
                <td><input type="checkbox"></td>
                <td>Apple Watch</td>
                <td>2000</td>
            </tr>
        </tbody>
    </table>
    <script>
        // 1.获取元素
        var j_cbAll = document.getElementById('j_cbAll');//全选按钮
        var j_tbs = document.getElementById('j_tbs').getElementsByTagName('input');//下面所有的复选框都被选中
        // 2.注册事件
        // 全选和取消全选做法
        j_cbAll.onclick = function(){
            for(var i = 0; i<j_tbs.length; i++){
                // this.checked 可以得到当前复选框的选中状态 如果是true 就是选中 如果是false 就是未选中
                j_tbs[i].checked = this.checked;
            }   
        }
        // 下面是复选框需全部选中 上面全选才能选中做法
        for(var i = 0; i<j_tbs.length; i++){
            j_tbs[i].onclick = function() {
                // flag 控制全选按钮是否选中
                var flag =true;
                // 每次点击下面的复选框都要循环检查4个小按钮是否全被选中
                for(var i = 0 ; i<j_tbs.length; i++){
                    if(!j_tbs[i].checked){
                        flag=false;
                        break;//退出for循环 这样可以提高执行效率 因为只要有一个没有选中 剩下的就无需
                    }
                }
                j_cbAll.checked = flag;
            }
        }

    </script>
</body>
举报

相关推荐

0 条评论