使用JavaScript实现某个功能 | 青训营

如何使用JavaScript实现某个功能或解决某个问题?

JavaScript 是一种非常灵活和强大的编程语言,它可以用来实现各种功能或解决各种问题。

例如,你可以用 JavaScript 来:

  • 创建动态的网页效果,如幻灯片、下拉菜单、弹窗等。
  • 验证用户输入的表单数据,如邮箱、密码、手机号等。
  • 检测用户的浏览器类型和版本,以便为不同的浏览器提供最佳的用户体验。
  • 存储和读取用户的偏好设置,如主题、语言、字体大小等。
  • 与服务器端进行数据交互,如发送请求、接收响应、处理 JSON 数据等。
  • 利用 HTML5 的新特性,如 CanvasAudioVideoGeolocation 等,创建富媒体和交互式的应用。
  • 编写自定义的函数和对象,以实现更复杂和高级的逻辑和算法。

JavaScript如此强大,在编写程序的时候遇到困难如何解决,用一个TodoList案例来演示.。

TodoList案例:

案例最终实现效果如下图:

要求:

  • input框内输入要添加的事项,按回车后能够在列表中添加一个事项。
  • 每个事项的状态为已完成状态后,底部的复选框会自动勾选
  • 点击底部的复选框能够把列表中的所有事项都设为已完成状态或者是未完成状态
  • 点击底部的"清除已完成事项按钮"能够清除列表中所有的已完成事项
  • 底部的已完成事项数和全部的事项数能够跟随用户的操作及时改变

弄清楚要实现那些功能后开始按照以下步骤编写代码。

实现静态网页

这一步先不考虑js的交互效果,先把静态的网页写出来,然后再逐步给页面添加交互效果,所以,很容易写出以下代码:

ini 复制代码
html
复制代码
<div class="todolist">
    <div class="header">
        <input
               type="text"
               class="something"
               placeholder="请输入你的任务事项,按回车确定"
        />
    </div>
    
    <div class="content">
        <div class="item">
            <input type="checkbox" class="state" />
            <label class="title">Hello world!</label>
        </div>
        <div class="item">
            <input type="checkbox" class="state" />
            <label class="title">hello world!</label>
        </div>
        <div class="item">
            <input type="checkbox" class="state" />
            <label class="title">hello world!</label>
        </div>
    </div>
    
    <div class="footer">
        <input type="checkbox" class="select-all" />
        <span class="sum">已完成 0/全部 3</span>
        <button class="clear">清除已完成事项</button>
    </div>
</div>
css 复制代码
css
复制代码
html,
body {
  width: 100%;
  height: 100%;
  padding: 0;
  margin: 0;
}

.todolist {
  width: 600px;
  margin: 0 auto;
  border: 1px solid gray;
  padding: 5px;
  border-radius: 5px;
}

.todolist .header .something {
  width: 600px;
  height: 30px;
  margin-bottom: 10px;
  border: 1px solid gray;
  box-sizing: border-box;
}

.todolist .content .item {
  width: 600px;
  height: 40px;
  line-height: 40px;
  border: 1px solid gray;
  border-radius: 5px;
  box-sizing: border-box;
}
.todolist .content .item:hover {
  background-color: rgba(128, 128, 128, 0.144);
}

.todolist .footer {
  width: 600px;
  height: 50px;
  line-height: 50px;
  position: relative;
}

.todolist .footer .clear {
  position: absolute;
  right: 0;
  top: 50%;
  transform: translate(0, -50%);
  font-size: 15px;
  background-color: rgb(226, 92, 70);
  color: white;
  border: 1px solid red;
  border-radius: 3px;
  padding: 5px;
  overflow: hidden;
  cursor: pointer;
}

这样就实现了静态网页的效果,当然,展示一个时间列表也可以写成一个<ul>列表展示,实现方法有很多,不必拘泥于一种。

除此之外,我们还要为这个案例添加交互效果,这就要用到我们强大的JavaScript了,我们依次实现我们一开始分析出的功能模块。

添加交互效果

在写JavaScript代码之前,我们要知道在一个大型项目中,同一个功能可能在很多地方都需要用到,并且在该功能的基础上我们还要进行改造或扩展,所以最好我们把所有的功能封装起来,用类来表示。

javascript 复制代码
javascript
复制代码
class TodoList {
  constructor(cName) {
    this.todolist = document.querySelector(cName);
  }
  registerPlugins(...plugins) {
    plugins.forEach((plugin) => plugin(this));
  }
    /* ... */
}

因为这个类是针对于TodoList这个DOM元素的类,类里面的所有操作都是对TodoList这个DOM元素的操作,所以毫无疑问,我们必须要首先拿到这个元素,通过以下代码创建实例。

arduino 复制代码
js
复制代码
const todolist = new TodoList('todolist')

为了方便改造或扩展,我们把所有功能写成插件,通过依赖注入的方式添加交互功能,以后我们可通过如下代码添加功能。

ini 复制代码
js
复制代码
todolist.registerPlugins(PluginsName1, PluginsName2, ...);

功能:添加事件

很明显,我们要添加事件就要给顶部的input框绑定事件,按回车后触发事件的回调函数,在回调函数中往列表中添加一个展示事件的DOM元素。

javascript 复制代码
js
复制代码
this.something = this.todolist.querySelector('.header .something');  

this.something.addEventListener("keypress", (evt) => {
  if (evt.keyCode === 13) {
        this.addSomething(evt.target.value);
      }
});

addSomething(str) {
    console.log(str);
    /* ... */
}
相关推荐
Find25 天前
MaxKB 集成langchain + Vue + PostgreSQL 的 本地大模型+本地知识库 构建私有大模型 | MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 14.数组元素之和最小化 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 25.DNA序列编辑距离 | 豆包MarsCode AI刷题
青训营笔记
理tan王子25 天前
伴学笔记 AI刷题 9.超市里的货物架调整 | 豆包MarsCode AI刷题
青训营笔记
夭要7夜宵1 个月前
分而治之,主题分片Partition | 豆包MarsCode AI刷题
青训营笔记
三六1 个月前
刷题漫漫路(二)| 豆包MarsCode AI刷题
青训营笔记
tabzzz1 个月前
突破Zustand的局限性:与React ContentAPI搭配使用
前端·青训营笔记
Serendipity5651 个月前
Go 语言入门指南——单元测试 | 豆包MarsCode AI刷题;
青训营笔记
wml1 个月前
前端实践-使用React实现简单代办事项列表 | 豆包MarsCode AI刷题
青训营笔记
用户44710308932421 个月前
详解前端框架中的设计模式 | 豆包MarsCode AI刷题
青训营笔记