使用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);
    /* ... */
}
相关推荐
CallBack8 个月前
Typora+PicGo+阿里云OSS搭建个人图床,纵享丝滑!
前端·青训营笔记
Taonce1 年前
站在Android开发者的角度认识MQTT - 源码篇
android·青训营笔记
AB_IN1 年前
打开抖音会发生什么 | 青训营
青训营笔记
monster1231 年前
结营感受(go) | 青训营
青训营笔记
翼同学1 年前
实践记录:使用Bcrypt进行密码安全性保护和验证 | 青训营
青训营笔记
hu1hu_1 年前
Git 的正确使用姿势与最佳实践(1) | 青训营
青训营笔记
星曈1 年前
详解前端框架中的设计模式 | 青训营
青训营笔记
tuxiaobei1 年前
文件上传漏洞 Upload-lab 实践(中)| 青训营
青训营笔记
yibao1 年前
高质量编程与性能调优实战 | 青训营
青训营笔记
小金先生SG1 年前
阿里云对象存储OSS使用| 青训营
青训营笔记