这些前端案例看似很简单(内附动图)

简介: 前言在学习前端js操作元素的时候,往往有很多的案例的做法的思想都是一样的,我们一定要会。本篇文章将从几个小demo入手,带你领略js的风采。很常见的一些案例,一定要学会哦!!!

排他思想在我们前端开发中十分的常见,因此我打算在写这些案例之前简单讲一讲排他思想,不只在这篇博客,我后面的前端小demo也会用到排他思想,这在我们前端开发中很常见,用处很广,所以你一定要掌握哦!


一句话总结排他思想:


💙💙干掉其他人,留下我自己💙💙


如果有同一组元素,我们想要某一个元素实现某种样式,需要用到循环的排他思想算法:

1.所有元素全部清除样式(干掉其他人)

2.给当前元素设置样式(留下我自己)

3.注意顺序不能颠倒,首先干掉其他人,再设置自己


🐬案例-点击按钮变色

分析:首先循环为每一个按钮注册事件,然后点击按钮添加背景色之前,清除之前以点击过的样式,最终为点击的按钮添加新样式。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        button{
            border-radius: 10%;
            background-color:skyblue;
        }
    </style>
</head>
<body>
    <button>按钮1</button>
    <button>按钮2</button>
    <button>按钮3</button>
    <button>按钮4</button>
    <button>按钮5</button>
    <script>
    //排他思想
        var btn = document.querySelectorAll('button');
        for (var i=0;i<btn.length;i++){
            // 为每一个按钮注册事件
            btn[i].onclick = function(){
                //点击后添加背景色之前,清除之前以点击过的样式(干掉所有人)
                for (var i=0;i<btn.length;i++){
                    btn[i].style.backgroundColor = '';
                }
                // 留下我自己
                this.style.backgroundColor = 'pink';
            }
        }
    </script>
</body>
</html>

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        *{
            margin: 0;
            padding: 0;
        }
        li{
            list-style: none;
        }
        body{
            background:url('img/201.jpg') no-repeat;
            background-size: cover;
        }
        .box{
            overflow: hidden; /*清除浮动*/
            width: 410px;
            background-color: #fff;
            margin-top: 100px;
            margin-left: 70%;
            padding:3px 0;
        }
        .box li{
            float:left;
            width: 100px;   
            margin: 0 1px;   
        }
        img{
            width: 100%;
            vertical-align: bottom; /*li盒子是图片按比例撑高的,图片和盒子下边默认是基线对齐,有间隙*/
        }
    </style>
</head>
<body>
    <ul class="box">
        <li><img src="img/201.jpg" alt=""></li>
        <li><img src="img/202.jpg" alt=""></li>
        <li><img src="img/203.jpg" alt=""></li>
        <li><img src="img/204.jpg" alt=""></li>
    </ul>
    <script>
        // js实现换肤效果 循环注册事件就行,用不到排他思想
        var imgs = document.getElementsByClassName('box')[0].getElementsByTagName('img');
        for (var i=0;i<imgs.length;i++){
            imgs[i].onclick = function(){
                arr = this.src.split('/');
                imgUrl = arr[5] + '/' + arr[6]; //切割链接为  img/***.jpg
                document.body.style.backgroundImage = 'url(' + imgUrl + ')';
            }
        }
    </script>
</body>
</html>

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        table{
            border: 1px solid #999;
            border-collapse: collapse;
            text-align: center;
            margin: 0 auto;
        }
        th,td{
            border-bottom: 1px solid #999;
            padding: 5px;
        }
        .bg{
            background-color: #87ceeb8c;
        }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr class="bg">
                <th>代码</th>
                <th>名称</th>
                <th>最新公布净值</th>
                <th>累计净值</th>
                <th>前单位净值</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>0001</td>
                <td>公司1</td>
                <td>1075</td>
                <td>1086</td>
                <td>1023</td>
            </tr>
            <tr>
                <td>0002</td>
                <td>公司2</td>
                <td>1075</td>
                <td>1086</td>
                <td>1023</td>
            </tr>
            <tr>
                <td>0003</td>
                <td>公司3</td>
                <td>1075</td>
                <td>1086</td>
                <td>1023</td>
            </tr>
            <tr>
                <td>0004</td>
                <td>公司4</td>
                <td>1075</td>
                <td>1086</td>
                <td>1023</td>
            </tr>
        </tbody>
    <table>
    <script>
        //表格隔行变色
        var trs = document.querySelector('tbody').getElementsByTagName('tr');
        for (var i=0;i<trs.length;i++){
            trs[i].onmouseover = function(){
                this.className = 'bg';
            }
            trs[i].onmouseout = function(){
                this.className = '';
            }
        }
    </script>
</body>
</html>

image.png

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
       table{
           border-collapse: collapse;
           text-align: center;
           margin: 100px auto;
           border: 1px solid #999;
       }
       thead th{
           background-color: #87ceeb8c;
       }
       th,td{
           border: 1px solid #999;
           padding: 0 10px;
       }
    </style>
</head>
<body>
    <table>
        <thead>
            <tr>
                <th><input type="checkbox" id="chAll"></th>
                <th>商品</th>
                <th>价钱</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td><input type="checkbox"></td>
                <td>李宁衣服</td>
                <td>500</td>
            </tr>
            <tr>
                <td><input type="checkbox"></td>
                <td>汇源果汁</td>
                <td>5</td>
            </tr>
            <tr>
                <td><input type="checkbox"></td>
                <td>鸿星尔克鞋子</td>
                <td>150</td>
            </tr>
        </tbody>
    </table>
    <script>
        //表单全选,取消全选 循环让下面的checked属性跟随总复选框即可
        var chAll = document.getElementById('chAll');
        var tdIpts = document.querySelector('tbody').getElementsByTagName('input');
        // 为总复选框注册事件
        chAll.onclick = function(){
            // console.log(this.checked);  // true/false
            for (var i=0;i<tdIpts.length;i++){
                tdIpts[i].checked = this.checked;
            }
        }
        //为下面的小复选框注册事件,当全部选中时,总复选框也选中,当其中有一个么选中时,复选框取消选中
        for (var i=0;i<tdIpts.length;i++){
            tdIpts[i].onclick = function(){
               var flag = true; // flag控制全选按钮是否选中
               //检查所有的小复选框的选中状态 
                for (var i=0;i<tdIpts.length;i++){
                   if(!tdIpts[i].checked){  // 如果有一个么有选中,flag=false,且break退出
                        flag = false;
                        break;
                    }
                }
                chAll.checked = flag;
            }
        }
    </script>
</body>
</html>

image.png


相关文章
|
7月前
|
JavaScript 前端开发 Java
纯前端JS实现人脸识别眨眨眼张张嘴案例
纯前端JS实现人脸识别眨眨眼张张嘴案例
|
4月前
|
搜索推荐 前端开发 数据可视化
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
本文介绍了一个基于Django框架、协同过滤算法、ECharts数据可视化以及Bootstrap前端技术的酒店推荐系统,该系统通过用户行为分析和推荐算法优化,提供个性化的酒店推荐和直观的数据展示,以提升用户体验。
173 1
【优秀python web毕设案例】基于协同过滤算法的酒店推荐系统,django框架+bootstrap前端+echarts可视化,有后台有爬虫
|
3月前
|
前端开发 JavaScript
前端一键回到顶部案例
本文介绍了如何实现网页中的一键回到顶部功能,包括两种方法:第一种是通过HTML中的锚点跳转实现快速回到顶部;第二种是使用JavaScript的`scrollTo`方法结合`requestAnimationFrame`实现滚动动画效果,让页面滚动更加平滑自然。
61 1
前端一键回到顶部案例
|
3月前
|
前端开发 数据安全/隐私保护
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
本文档详细介绍了HTML表单的多种元素及其用法,包括下拉菜单(`&lt;select&gt;` 和 `&lt;option&gt;`)、文本域(`&lt;textarea&gt;`)、标签解释(`&lt;label&gt;`)、各类按钮(`&lt;button&gt;`)及表单重置功能、无语义布局标签(`&lt;div&gt;` 和 `&lt;span&gt;`)以及字符实体的应用。此外,还提供了一个完整的注册信息表单案例,涵盖个人信息、教育经历和工作经历等部分,展示了如何综合运用上述元素构建实用的表单。
【前端web入门第二天】03 表单-下拉菜单 文本域 label标签 按钮 【附注册信息综合案例】
|
2月前
|
存储 前端开发 Java
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
本文介绍了使用Kaptcha插件在SpringBoot项目中实现验证码的生成和验证,包括后端生成验证码、前端展示以及通过session进行验证码校验的完整前后端代码和配置过程。
266 0
验证码案例 —— Kaptcha 插件介绍 后端生成验证码,前端展示并进行session验证(带完整前后端源码)
|
3月前
|
JavaScript 前端开发
前端基础(十)_Dom自定义属性(带案例)
本文介绍了DOM自定义属性的概念和使用方法,并通过案例展示了如何使用自定义属性来控制多个列表项点击变色的独立状态。
52 0
前端基础(十)_Dom自定义属性(带案例)
|
3月前
|
JSON 前端开发 JavaScript
socket.io即时通信前端配合Node案例
本文介绍了如何使用socket.io库在Node.js环境下实现一个简单的即时通信前端配合案例,包括了服务端和客户端的代码实现,以及如何通过socket.io进行事件的发送和监听来实现实时通信。
51 2
|
3月前
|
前端开发
【前端web入门第五天】03 清除默认样式与外边距问题【附综合案例产品卡片与新闻列表】
本文档详细介绍了CSS中清除默认样式的方法,包括清除内外边距、列表项目符号等;探讨了外边距的合并与塌陷问题及其解决策略;讲解了行内元素垂直边距的处理技巧;并介绍了圆角与盒子阴影效果的实现方法。最后通过产品卡片和新闻列表两个综合案例,展示了所学知识的实际应用。
74 11
|
3月前
|
前端开发
前端web入门第四天】03 显示模式+综合案例热词与banner效果
本文档介绍了HTML中标签的三种显示模式:块级元素、行内元素与行内块元素,并详细解释了各自的特性和应用场景。块级元素独占一行,宽度默认为父级100%,可设置宽高;行内元素在同一行显示,尺寸由内容决定,设置宽高无效;行内块元素在同一行显示,尺寸由内容决定,可设置宽高。此外,还提供了两个综合案例,包括热词展示和banner效果实现,帮助读者更好地理解和应用这些显示模式。
|
3月前
|
JavaScript 前端开发
【前端web入门第一天】03 综合案例 个人简介与vue简介
该网页采用“从上到下,先整体再局部”的制作思路,逐步分析并编写代码实现个人简介页面。内容涵盖尤雨溪的背景、学习经历及主要成就,同时介绍其开发的Vue.js框架特点。代码结构清晰,注重细节处理,如使用快捷键提高效率,预留超链接位置等,确保最终效果符合预期。
下一篇
DataWorks