探索 Vue.js 的动态样式与交互:一个有趣的样式调整应用

修改日期备注
2025.1.3初版

一、前言

今天和大家分享在 Vue.js 学习过程中开发的超酷的小应用。这个应用可以让我们通过一些简单的交互元素,如复选框、下拉菜单和输入框,来动态地改变页面上元素的样式哦 让我们一起深入了解一下这个项目的实现过程,以及 Vue.js 在其中展现出的强大功能吧。

二、项目概览

我们先来看一下这个项目的整体结构,它由一个 HTML 文件和一个 JavaScript 文件组成,还搭配了一个简单的 CSS 文件来美化页面。

三、HTML 部分

以下是 HTML 文件的代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title><link rel="stylesheet" href="./style.css" /><script src="https://unpkg.com/vue@latest"></script></head><body><div id="app"><label> <input type="checkbox" v-model="isPurple"/> Purple </label><select v-model="textColor"><option value="">White</option><option value="text-black">Black</option><option value="text-orange">Orange</option></select><label>Circle Size<input type="number" v-model="size"/></label><label>Circle Rotate<input type="number" v-model="angle"/></label><div class="circle" :class="[circleClass, textColor]" :style="[circleSize, circleRotate]">Hi!</div></div><script src="./main.js"></script></body>
</html>

在这个 HTML 文件中,有几个关键部分:

1. 输入元素

  • 我们有一个复选框:

    <label> <input type="checkbox" v-model="isPurple"/> Purple </label>
    

    这里使用了 v-model="isPurple",这个 v-model 指令可太重要啦!它将复选框的选中状态和 Vue 实例中的 isPurple 属性进行了双向绑定。这意味着,当我们勾选或取消勾选这个复选框时,isPurple 的值会相应地变成 truefalse

  • 还有一个下拉菜单:

    <select v-model="textColor"><option value="">White</option><option value="text-black">Black</option><option value="text-orange">Orange</option>
    </select>
    

    这个下拉菜单通过 v-model="textColor" 与 Vue 实例中的 textColor 属性进行双向绑定。当我们选择不同的选项时,textColor 的值就会变成相应的选项值,比如 “text-black” 或 “text-orange”。

  • 以及两个输入框:

    <label>Circle Size<input type="number" v-model="size"/>
    </label>
    <label>Circle Rotate<input type="number" v-model="angle"/>
    </label>
    

    这两个输入框分别与 sizeangle 属性进行双向绑定,当我们输入数字时,这些数字会存储在对应的属性中。它们都使用了 v-model 指令,这是 Vue.js 中实现双向数据绑定的神器哦,能让用户输入直接影响到 Vue 实例的数据。

2. 样式绑定元素

<div class="circle" :class="[circleClass, textColor]" :style="[circleSize, circleRotate]">Hi!</div>

这里是最有意思的部分啦 我们有一个 div 元素,它有一个静态的类 circle,同时使用了 :class:style 来动态绑定类和样式。

  • :class="[circleClass, textColor]"

    • circleClass 是一个计算属性,它会根据 isPurple 的值添加一个 purple 类。
    • textColor 是用户从下拉菜单中选择的值,会被作为类添加到这个 div 元素上。这样,我们可以通过用户的操作来动态改变元素的类,从而改变元素的颜色哦。
  • :style="[circleSize, circleRotate]"

    • circleSizecircleRotate 是另外两个计算属性,它们会根据用户输入的 sizeangle 来改变元素的大小和旋转角度。是不是很神奇呢?

    image-20250103182000322

四、JavaScript 部分

这是 main.js 的代码:

const app = {data() {return {isPurple: false,textColor: "",size: 200,angle: 0,};},computed: {circleClass() {return {purple: this.isPurple,};},circleSize() {return {height: `${this.size || 100}px`,width: `${this.size || 100}px`,lineHeight: `${this.size || 100}px`,};},circleRotate() {return {transform: `rotate(${this.angle || 0}deg)`,};},},
};Vue.createApp(app).mount("#app");

让我们来拆解一下:

1. 数据部分(data)

data() {return {isPurple: false,textColor: "",size: 200,angle: 0,};
}

这里定义了几个初始数据属性,isPurple 用于存储复选框的状态,textColor 存储文本颜色的选项值,size 存储圆形的大小,angle 存储旋转的角度。

2. 计算属性(computed)

  • circleClass()

    circleClass() {return {purple: this.isPurple,};
    }
    

    这个计算属性会根据 isPurple 的值返回一个对象,如果 isPurpletrue,就会添加 purple 类。这样,我们就可以通过复选框的操作来改变元素的样式啦。

  • circleSize()

    circleSize() {return {height: `${this.size || 100}px`,width: `${this.size || 100}px`,lineHeight: `${this.size || 100}px`,};
    }
    

    这个计算属性会根据 size 的值生成一个对象,包含 heightwidthlineHeight 的样式。这里还有个小技巧哦,使用 || 100 是为了防止 size 为空时出现样式异常,确保元素至少有一个初始大小。

  • circleRotate()

    circleRotate() {return {transform: `rotate(${this.angle || 0}deg)`,};
    }
    

    同样,这个计算属性根据 angle 生成一个包含 transform 属性的对象,用于旋转元素。这里也使用了 || 0 来避免 angle 为空时的问题。

五、CSS 部分

我们还有一个 style.css 文件,来看看它的代码:

.circle {background-color: purple;border-radius: 50%;display: flex;justify-content: center;align-items: center;transition: all 0.5s;
}
.purple {background-color: purple;
}
.text-black {color: black;
}
.text-orange {color: orange;
}
  • .circle 类给我们的元素一个圆形的形状(通过 border-radius: 50%),还设置了背景色、布局和过渡效果。
  • .purple 类在元素添加了 purple 类时会生效,改变背景颜色。
  • .text-black.text-orange 类会根据用户选择的文本颜色改变元素的文本颜色。
  • image-20250103181937887

六、总结

通过这个项目,我们学到了好多 Vue.js 的重要知识呢 以下是一些值得注意的要点:

1. 双向数据绑定(v-model)

  • v-model 让我们可以轻松地将用户输入和 Vue 实例中的数据关联起来,让数据在用户操作和 Vue 实例之间自由流动,大大简化了数据更新的流程。无论是复选框、下拉菜单还是输入框,使用 v-model 都让我们的开发变得轻松愉快。

2. 计算属性(computed)

  • 计算属性真是个好帮手!它可以根据数据的变化自动计算出新的值,让我们能动态地生成类和样式对象。比如 circleClass 根据 isPurple 决定是否添加 purple 类,circleSizecircleRotate 根据用户输入生成样式,让我们的元素可以实时更新样式。

3. 动态样式绑定(:class 和 :style)

  • 通过 :class:style,我们可以根据计算属性和用户选择动态地添加类和样式,为元素赋予了更多的交互性和动态性。这让我们的页面变得更加生动,而且代码也更简洁明了哦。

七、后续改进和扩展

当然啦,这个小应用还有很多可以改进和扩展的地方呢 我们可以:

  • 增加更多的样式选项,比如边框、阴影等,让用户可以更自由地定制元素的外观。
  • 可以添加更多的交互元素,例如添加一个按钮,让用户可以重置所有设置。
  • 把这个应用变成一个组件,这样可以在其他 Vue 项目中更方便地复用哦。

怎么样,是不是觉得 Vue.js 很有趣呢 希望你也能动手尝试一下,创建出属于自己的动态样式应用。如果你在开发过程中遇到什么问题,或者有什么新的想法,欢迎在评论区留言,让我们一起学习和进步吧 期待看到大家创造出更多精彩的 Vue.js 应用哦

八、注意事项

在使用这个应用时,要注意以下几点哦:

  • 确保你的文件引用路径正确,比如 style.cssmain.js 要和 HTML 文件在同一目录,不然可能会出现文件加载错误。
  • 要正确使用 v-model 指令,确保绑定的属性在 data 中已经定义。
  • 对于计算属性,要注意它们的计算逻辑,确保能正确地生成你想要的结果。

好啦,今天的分享就到这里啦 希望这篇博客能帮助你更好地理解 Vue.js 的这些特性,让我们一起在 Vue.js 的世界里继续探索吧!

**

在使用这个应用时,要注意以下几点哦:

  • 确保你的文件引用路径正确,比如 style.cssmain.js 要和 HTML 文件在同一目录,不然可能会出现文件加载错误。
  • 要正确使用 v-model 指令,确保绑定的属性在 data 中已经定义。
  • 对于计算属性,要注意它们的计算逻辑,确保能正确地生成你想要的结果。

好啦,今天的分享就到这里啦 希望这篇博客能帮助你更好地理解 Vue.js 的这些特性,让我们一起在 Vue.js 的世界里继续探索吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/501213.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python应用指南:高德交通态势数据

在现代城市的脉络中&#xff0c;交通流量如同流动的血液&#xff0c;交通流量的动态变化对出行规划和城市管理提出了更高的要求。为了应对这一挑战&#xff0c;高德地图推出了交通态势查询API&#xff0c;旨在为开发者提供一个强大的工具&#xff0c;用于实时获取指定区域或道路…

整合版canal ha搭建--基于1.1.4版本

开启MySql Binlog&#xff08;1&#xff09;修改MySql配置文件&#xff08;2&#xff09;重启MySql服务,查看配置是否生效&#xff08;3&#xff09;配置起效果后&#xff0c;创建canal用户&#xff0c;并赋予权限安装canal-admin&#xff08;1&#xff09;解压 canal.admin-1…

物联网控制期末复习

第3章 物联网控制系统的过程通道设计 3.1 模拟量输出通道 3.1.1单模拟量输出通道的构成 计算机控制系统的模拟量输出通道将计算机产生的数字控制信号转换为模拟信号&#xff08;电压或电流&#xff09;作用于执行机构&#xff0c;以实现对被控对象的控制。 多D/A结构&#…

python生成、操作svg图片

生成svg图片 通过python生成svg图片的方法有许多&#xff0c;比如OpenCV的源码中有svgfig.py这个脚本可以用于生成svg图片(OpenCV的棋盘格图片可以通过这个方法生成)&#xff0c;也可以使用svg.py的库&#xff0c;安装方法如下 pip install svg.py 下面是通过这个库生成一个简…

2024年大型语言模型(LLMs)的发展回顾

2024年对大型语言模型&#xff08;LLMs&#xff09;来说是充满变革的一年。以下是对过去一年中LLMs领域的关键进展和主题的总结。 GPT-4的壁垒被打破 去年&#xff0c;我们还在讨论如何构建超越GPT-4的模型。如今&#xff0c;已有18个组织拥有在Chatbot Arena排行榜上超越原…

Servlet解析

概念 Servlet是运行在服务端的小程序&#xff08;Server Applet)&#xff0c;可以处理客户端的请求并返回响应&#xff0c;主要用于构建动态的Web应用&#xff0c;是SpringMVC的基础。 生命周期 加载和初始化 默认在客户端第一次请求加载到容器中&#xff0c;通过反射实例化…

图片验证码如何显示在 Apifox 的响应控制台中

当接口返回的响应数据结构非常复杂&#xff0c;充斥着嵌套的对象和数组&#xff0c;其中还可能包含着图片的 URL 时&#xff0c;如果要查找特定信息&#xff0c;你需要不断上下滚动 JSON 响应&#xff0c;试图找到所需的字段。这不仅让人恼火&#xff0c;还浪费了宝贵的时间。 …

设计模式 创建型 单例模式(Singleton Pattern)与 常见技术框架应用 解析

单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;旨在确保某个类在应用程序的生命周期内只有一个实例&#xff0c;并提供一个全局访问点来获取该实例。这种设计模式在需要控制资源访问、避免频繁创建和销毁对象的场景中尤为有用。 一、核心…

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开

《Xsens动捕与人形机器人训练》讲座将于1月9日下午2:30在线上召开&#xff0c;本次讲座中来自Xsens的人形机器人与动捕技术专家Jeffrey Muller与Dennis Kloppenburg不仅将就Xsens动作捕捉系统与人形机器人行为训练中的实际应用进行详细讲解&#xff0c;同时还会对目前大家所关注…

Flutter踩坑记-第三方SDK不兼容Gradle 8.0,需适配namespace

最近需要集成Flutter作为Module&#xff0c;Flutter依赖了第三方库&#xff0c;Gradle是8.0版本。 编译报错&#xff1a; 解决办法是在.android根目录下的build.gradle下新增一行代码&#xff1a; buildscript {ext.kotlin_version "1.8.22"repositories {google()…

Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)

Linux内核源码添加到VsCode工程 下载Linux-4.9.88源码&#xff1a; 没有处理同名文件的压缩包&#xff1a; https://pan.baidu.com/s/1yjIBXmxG9pwP0aOhW8VAVQ?pwde9cv 已把同名文件中以大写命名的文件加上_2后缀的压缩包&#xff1a; https://pan.baidu.com/s/1RIRRUllYFn2…

ImageNet 2.0?自动驾驶数据集迎来自动标注新时代

引言&#xff1a; 3DGS因其渲染速度快和高质量的新视角合成而备受关注。一些研究人员尝试将3DGS应用于驾驶场景的重建。然而&#xff0c;这些方法通常依赖于多种数据类型&#xff0c;如深度图、3D框和移动物体的轨迹。此外&#xff0c;合成图像缺乏标注也限制了其在下游任务中的…

朱姆沃尔特隐身战舰:从失败到威慑

前言 "朱姆沃尔特"号驱逐舰是美国海军雄心勃勃的项目&#xff0c;旨在重塑未来海战。它融合了隐身、自动化和强大火力&#xff0c;然而由于技术问题和预算超支&#xff0c;原计划建造32艘的目标被大幅缩减&#xff0c;最终只建造了三艘。该舰的设计特点包括“穿浪逆船…

电子电器框架 --- 电动汽车上的车载充电器(OBC)

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源,以现象替代逻辑,以情绪代替思考,把消极接受现实的懦弱,伪装成乐观面对不幸的…

【C语言的小角落】--- 深度理解取余/取模运算

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; C语言的小角落 本篇博客我们来深度理解取余/取模&#xff0c;以及它们在不同语言中出现不同现象的原因。 &#x1f3e0; 关于取整 &#x1f3b5; 向0取整…

快速上手LangChain(三)构建检索增强生成(RAG)应用

文章目录 快速上手LangChain(三)构建检索增强生成(RAG)应用概述索引阿里嵌入模型 Embedding检索和生成RAG应用(demo:根据我的博客主页,分析一下我的技术栈)快速上手LangChain(三)构建检索增强生成(RAG)应用 langchain官方文档:https://python.langchain.ac.cn/do…

Spring源码分析之事件机制——观察者模式(二)

目录 获取监听器的入口方法 实际检索监听器的核心方法 监听器类型检查方法 监听器的注册过程 监听器的存储结构 过程总结 Spring源码分析之事件机制——观察者模式&#xff08;一&#xff09;-CSDN博客 Spring源码分析之事件机制——观察者模式&#xff08;二&#xff…

redux react-redux @reduxjs/toolkit

redux团队先后推出了redux、react-redux、reduxjs/toolkit&#xff0c;这三个库的api各有不同。本篇文章就来梳理一下当我们需要在项目中集成redux&#xff0c;从直接使用redux&#xff0c;到使用react-redux&#xff0c;再到react-redux和reduxjs/toolkit配合使用&#xff0c;…

OpenHarmony通过挂载镜像来修改镜像内容,RK3566鸿蒙开发板演示

在测试XTS时会遇到修改产品属性、SElinux权限、等一些内容&#xff0c;修改源码再编译很费时。今天为大家介绍一个便捷的方法&#xff0c;让OpenHarmony通过挂载镜像来修改镜像内容&#xff01;触觉智能Purple Pi OH鸿蒙开发板演示。搭载了瑞芯微RK3566四核处理器&#xff0c;树…

网安数学基础期末复习

目录 整除同余同余方程群和环 整除 a的显然因数/平凡因数1&#xff0c;a整除的传递性和组合性 若 a ∣ b , b ∣ a a|b,b|a a∣b,b∣a 则 a b a\pm b ab欧几里得带余除法 公因数和最大公因数在整除里的定义&#xff0c;最大公因数为1则两数互质&#xff0c;注意公因数有正…