使用 Vue.js 和 Semantic-UI 做一个简单的愿望清单

简介: 使用 Vue.js 和 Semantic-UI 做一个简单的愿望清单

简说Python,号主老表,Python终身学习者,数据分析爱好者,从18年开始分享Python知识,原创文章227篇,写过Python、SQL、Excel入门文章,也写过Web开发、数据分析文章,老表还总结整理了一份2022Python学习资料和电子书资源,关注后私信回复:2022 即可领取。

一、前言

2021年第一个周末,祝各位读者朋友平安顺利。

以前读过一句话:“当你穿过暴风雨的时候,你就不是原来那个人了。”

但他没有说,我们要如何穿过暴风雨。

2020刚开始的时候,我曾觉得冬天无比漫长,似乎没有尽头。到了六月的时候,才发觉时间过得比想象更快。而现在,2020年已经过去了,想来总觉得有些恍惚,那些时间那些岁月到底是怎么流逝的呢?那么,我们到底是如何穿过暴风雨的呢?

只有在这么一个时刻,才能明白,让我们穿越暴风雨的,不过是每一天的平凡生活。

当我们的生活日夜旋转不休,眼前的景象朦胧一片时,我们唯一能做的只是努力看清了脚底下的路,并且决定一步步慢慢前行。

我想是这样的,从没有一蹴而就的事,只有每一天努力前行。

直到某天乌云散去,回过头看,才能知道自己走了多远。

因为人生没有白走的路,每一步都算数。

周末用 Vue.js 和 Semantic-UI 做了一个简单的愿望清单,记录以后想和喜欢的人一起做的事,疲惫的生活里总要有些温柔的梦想吧。

本文相关源码及文件,可以在公众号 简说Python 回复:愿望清单 获取。

二、Vue.js介绍

官方文档传送门:https://cn.vuejs.org/v2/guide/installation.html

Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。

仿照官网案例的项目,主要为了熟悉 Vue.js 的基本用法,通过这个案例能吸收到基本的 Vue.js 操作image.pngimage.png

重构此项目可以学到以下知识点:

  • 基本的数据绑定语法
  • 计算属性
  • Class 绑定
  • 条件渲染
  • 列表渲染
  • 方法与事件绑定
  • 表单空间绑定
  • 自定义指令

额外还能学习到 LocalStorage 的简单用法,可以说通过详细学习此例子可以完成 Vue.js 最基本的入门操作, 完全熟悉不太容易, 主要是感受下 Vue.js 的强大和基本的使用,那么好的框架当然是越学越香,更多详细使用可以参考官方文档。


三、Semantic UI介绍

官方文档传送门:https://zijieke.com/semantic-ui/introduction/getting-started.php

image.png

在 HTML 中包含 (Include in Your HTML):运行 gulp 构建工具将会在你的项目中编译出 CSS 和 Javascript 文件。把编译出的文件和最新的 jQuery 一起包含到 HTML 中就可以使用 Semantic UI了,更多详细使用可以参考官方文档。

<link rel="stylesheet" type="text/css" href="semantic/dist/semantic.min.css">
<script
  src="https://code.jquery.com/jquery-3.1.1.min.js"
  integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
  crossorigin="anonymous"></script>
<script src="semantic/dist/semantic.min.js"></script>

四、实现愿望清单界面

「index.html」

<html data-framework="vue">
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>TODOS - A wish list</title>
    <link href="static/semantic.min.css" rel="stylesheet">
    <link href="static/style.css" rel="stylesheet">
  </head>
  <body>
   <div id="todos" class="ui text container" style="background: #F3F3F4;padding: 0 14px; min-height: 100%;">
     <h1 class="ui centered grey header" style="font-size: 5em;">
        <span class="pink text">A Wish List</span>
      </h1>
     <div class="ui stacked segment" style="padding: 14px;">
        <div class="ui fluid right action input">
          <input type="text" placeholder="想和喜欢的人一起做点什么?"
           v-model="newTitle"
           autofocus autocomplete="off"
           @keyup.enter="addTask">
          <button class="ui teal icon button" 
           @click="addTask">
            <i class="plus icon"></i>
          </button>
        </div>
        <div class="ui huge middle aligned divided selection list">
          <div class="item" v-for="task in filterTasks" :class="{ editing: task == editedTask }">
            <div class="right floated content">
              <i class="red remove icon" @click='removeTask(task);'></i>
            </div>
            <div class="content" @dblclick="editTask(task)">
              <div class="ui checkbox" >
                <input type="checkbox" name="example" v-model="task.completed">
                <label class="header"><span class="grey text">{{ task.title }}</span></label>
              </div>
           <div class="ui mini transparent input">
               <input class="edit" type="text" 
                v-model="task.title"
                v-task-focus="task == editedTask"
                @blur="saveEdit(task)"
                @keyup.enter="saveEdit(task)"
                @keyup.esc="cancelEdit(task)" >
              </div>
            </div>
          </div>
        </div>
        <div class="ui green divider" v-show="tasks.length"></div>
        <div class="ui grid" v-show="tasks.length">
          <div class="three wide column">
            <span class="grey text">
             <span class="green text" v-text="remaining"> </span><span class="grey text"> Left </span>
            </span>
          </div>
          <div class="eight wide column" style="padding: 0px;">
            <div class="ui mini secondary menu" style="margin-top: 8px;">
              <a @click="filterTask('all')" class="item" :class="{ active: visibility == 'all' }"><span class="pink text"> All </span></a>
              <a @click="filterTask('active')" class="item" :class="{ active: visibility == 'active' }"><span class="pink text"> Wait </span></a>
              <a @click="filterTask('completed')" class="item" :class="{ active: visibility == 'completed' }"><span class="pink text"> Completed </span></a>
            </div>
        </div>
        <div class="five wide column">
          <a class="clear" href="#" @click="removeCompleted($event)"><span class="red text">Clear</span></a>
        </div>
      </div>
      </div>
      <div class="intro">
        <span class="black text">A wish list of things you want to do with the people you love</span>
        <br>
              <br>
        <span class="black text">Based on <a href="https://cn.vuejs.org/v2/guide/" target='_blank'><span class="red text">Vue.js</span></a> + <a href="https://zijieke.com/semantic-ui/" target='_blank'><span class="red text">Semantic-UI</span></a></span>
              <br>
              <br>
        <span class="black text">叶庭云@CSDN:<a href="https://yetingyun.blog.csdn.net/" target='_blank'><span class="green text">https://yetingyun.blog.csdn.net/</span></a></span>
      </div>
    </div>
    <span class="text">    </span>
    <br>
    <br>
  </body>
  <script src="static/js/vue.js"></script>
  <script src="static/app.js"></script>
</html>

「引用资源」

image.png

「运行效果如下:」

image.png

使用 Vue.js 和 Semantic-UI 做了一个简单的愿望清单,实现了页面和用户的交互,在输入框中写入想和喜欢的人一起做的事,然后按 Enter 键或者点击右边的 "+",即可将数据添加进去,下方 3 Left 表示还有 3 个愿望未实现,点击 All 查看所有的愿望清单,点击 Wait 查看未实现的愿望,点击 Completed 查看已实现的愿望,错误添加进去的内容可以先选定,然后使用 Clear 清除掉再重新添加,或者鼠标悬停在那一条内容上,出现❌然后点击删除再重新添加,界面简洁美观,使用方便。

也可以使用 selenium 来打开本地 html 文件自动化添加

# -*- coding: UTF-8 -*-
"""
@File    :demo.py
@Author  :叶庭云
@CSDN    :https://yetingyun.blog.csdn.net/
"""
from selenium import webdriver
import time
from selenium.webdriver.common.keys import Keys
import selenium
print(selenium.__version__)   # 查看selenium版本
# 读取txt中数据   获取每一行
with open('things.txt', encoding='utf-8') as f:
    words = f.read().split('\n')
# 初始化 webdriver.Chrome()
chrome_driver = r'D:\python\pycharm2020\chromedriver.exe'  # chromedriver的路径
options = webdriver.ChromeOptions()
# 关闭左上方 Chrome 正受到自动测试软件的控制的提示
options.add_experimental_option('useAutomationExtension', False)
options.add_experimental_option("excludeSwitches", ['enable-automation'])
# 开启浏览器对象
browser = webdriver.Chrome(options=options, executable_path=chrome_driver)
# 得用绝对路径  相对路径会报错
browser.get(r'D:\python\pycharm2020\program\叶庭云  个人自娱\愿望清单 想和喜欢的人一起做的事\index.html')
# Xpath定位到输入框
browser.find_element_by_xpath('//*[@id="todos"]/div[1]/div[1]/input').click()
for word in words:
    # 写进每一条数据  然后按Enter键
    browser.find_element_by_xpath('//*[@id="todos"]/div[1]/div[1]/input').send_keys(word)
    browser.find_element_by_xpath('//*[@id="todos"]/div[1]/div[1]/input').send_keys(Keys.ENTER)
    time.sleep(1)   # 短暂休眠

「注意」:selenium 打开本地 html 文件,路径需用绝对路径,用相对路径会报错image.png

「运行效果如下:」

image.png

相关文章
|
1月前
|
开发框架 JavaScript 前端开发
HarmonyOS UI开发:掌握ArkUI(包括Java UI和JS UI)进行界面开发
【10月更文挑战第22天】随着科技发展,操作系统呈现多元化趋势。华为推出的HarmonyOS以其全场景、多设备特性备受关注。本文介绍HarmonyOS的UI开发框架ArkUI,探讨Java UI和JS UI两种开发方式。Java UI适合复杂界面开发,性能较高;JS UI适合快速开发简单界面,跨平台性好。掌握ArkUI可高效打造符合用户需求的界面。
110 8
|
3月前
|
JavaScript
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
这篇文章介绍了如何使用Ant Design Vue UI框架创建一个简单的后台管理模板,包括创建Vue项目、安装和使用ant-design-vue、以及编写后台管理通用页面的代码和样式。
Ant Design Vue UI框架的基础使用,及通用后台管理模板的小demo【简单】
|
4月前
|
JavaScript
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
vue element-ui 中el-message重复弹出问题解决 el-message重复弹出解决办法
275 49
|
2月前
|
JavaScript 索引
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
Vue开发中Element UI/Plus使用指南:常见问题(如Missing required prop: “value“)及中文全局组件配置解决方案
159 0
|
4月前
|
JavaScript 前端开发 安全
[译] 在 Vue 组件中分离 UI 和业务逻辑。
[译] 在 Vue 组件中分离 UI 和业务逻辑。
|
4月前
|
开发者 C# Android开发
明白吗?Xamarin与Native的终极对决:究竟哪种开发方式更适合您的项目需求,让我们一探究竟!
【8月更文挑战第31天】随着移动应用开发的普及,开发者面临多种技术选择。本文对比了跨平台解决方案Xamarin与原生开发方式的优势与劣势。Xamarin使用C#进行跨平台开发,代码复用率高,可大幅降低开发成本;但因基于抽象层,可能影响性能。原生开发则充分利用平台特性,提供最佳用户体验,但需维护多套代码库,增加工作量。开发者应根据项目需求、团队技能和预算综合考量,选择最适合的开发方式。
130 0
|
4月前
|
JavaScript 前端开发 开发者
决战前端之巅!Element UI与Vuetify谁才是Vue.js组件界的霸主?一场关于颜值与实力的较量!
【8月更文挑战第30天】本文对比了两款热门的Vue.js组件库——Element UI与Vuetify。Element UI由饿了么团队打造,提供多种高质量UI组件,设计简洁大方。Vuetify基于Material Design规范,支持Vue.js 2.0及3.0版本,具备前瞻性。两者均涵盖表单、导航、数据展示等组件,Element UI配置选项丰富,而Vuetify则提供了更深层的样式定制功能。开发者可根据项目需求及个人偏好选择合适的组件库。
341 0
|
4月前
|
JavaScript 开发者 UED
Vue.js组件库大对决:Element UI与Vuetify,开发者的罗密欧与朱丽叶!
【8月更文挑战第30天】Element UI和Vuetify是Vue.js开发中的热门组件库,前者简洁高效,后者遵循Material Design,国际化程度高。两者均提供丰富的组件支持,但Vuetify组件更多样,设计更灵活;Element UI在性能和中文支持上更优。文档方面,Element UI更直观易懂,而Vuetify配置灵活但学习成本稍高。选择时需综合考虑项目需求、团队背景及设计风格,以达到最佳开发效果。
217 0
|
4月前
|
JavaScript 前端开发
Vue实现Element UI框架的自定义输入框或下拉框在输入时对列表选项进行过滤,以及右键列表选项弹出菜单进行删除
本文介绍了如何在Vue框架结合Element UI库实现自定义输入框或下拉框,在输入时对列表选项进行过滤,并支持右键点击列表选项弹出菜单进行删除的功能。
100 0
|
4月前
|
JavaScript 容器
Vue+Element UI
该博客文章介绍了如何在Vue中集成Element UI来构建后台管理系统的左侧菜单,包括使用`el-menu`、`el-submenu`和`el-menu-item`等组件,并通过Vue router动态构建菜单项及其路由设置。