vue网站案例(vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码)

本文目录
- vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码
- Vue3基础-模板语法
- vite+vue3+threejs实现一个3D模型的展示案例
- Vue案例:图片动态切换效果
- 08《Vue 入门教程》Vue 事件处理
vue项目中实现H5调取摄像头扫码扫一扫功能+生成可识别的条形码
案例描述:需求是生成条形码并且在vue项目中实现扫一扫功能并不是拍照上传后端识别那种
项目场景:单纯的h5项目,没办法调用微信等封装好的组件或者js因为有些场景并不在微信自带的浏览器里面
生成条形码使用vue-barcode
使用vue实现h5扫码功能
Vue3基础-模板语法
如果我们希望把数据显示到模板(template)中,使用最多的语法是 “Mustache”语法 (双大括号) 的文本插值。
并且我们前端提到过,data返回的对象是有添加到Vue的响应式系统 中,当data中的数据发生改变时,对应的内容也会发生更新。
当然,Mustache中不仅仅可以是data中的属性,也可以是一个JavaScript的表达式:
下面这种写法是语句不是表达式,所以是错误的:
v-once用于指定元素或者组件只渲染一次,当数据发生变化时,元素或者组件以及其所有的子元素将视为静态内容并且跳过,该指令可以用于性能优化。
如果添加到父节点,那么所有的子节点也是只会渲染一次:
用于更新元素的 textContent,等价于"Mustache"语法,而且"Mustache"语法更灵活。
默认情况下,如果我们展示的内容本身是 html 的,那么vue并不会对其进行特殊的解析。如果我们希望这个内容被Vue可以解析出来,那么可以使用 v-html 来展示。
效果如下:
v-pre用于跳过元素和它的子元素的编译过程,显示原始的Mustache标签。
跳过不需要编译的节点,加快编译的速度。
效果如下:
这个指令保持在元素上直到关联组件实例结束编译。
v-cloak 和 CSS 规则如 { display: none } 一起用时,这个指令可以隐藏未编译的 Mustache 标签直到组件实例准备完毕,主要用于解决闪动问题,现在Vue3一般不会出现这个问题了。
《div》 不会显示,直到编译结束。
前面讲的一系列指令,主要是将值插入到模板内容中。但是,除了内容需要动态来决定外,某些属性我们也希望动态来绑定。比如动态绑定a元素的href属性,动态绑定img元素的src属性。
绑定属性我们使用 v-bind: ,缩写 : ,用于动态地绑定一个或多个 attribute,或一个组件 prop 到表达式。
v-bind用于绑定一个或多个属性值,或者向另一个组件传递props值(这个学到组件时再介绍),在开发中,有哪些属性需要动态进行绑定呢?还是有很多的,比如图片的链接src、网站的链接href、动态绑定一些类、样式等等。
v-bind有一个对应的语法糖,也就是简写方式,在开发中,我们通常会使用语法糖的形式,因为更简洁。
注意 :Vue2 template模板中只能有一个根元素,Vue3 template模板中允许有多个根元素。
在开发中,有时候我们的元素class也是动态的,比如:当数据为某个状态时,字体显示红色,当数据另一个状态时,字体显示黑色。
绑定class有两种方式:对象语法,数组语法。
① 对象语法:我们可以传给 :class (v-bind:class 的简写) 一个对象,以动态地切换 class。
② 数组语法:我们可以把一个数组传给 :class,以应用一个 class 列表;
我们可以利用v-bind:style来绑定一些CSS内联样式,这是因为某些样式我们需要根据数据动态来决定,比如某段文字的颜色,大小等等。
CSS属性名可以用驼峰式 (camelCase) 或短横线分隔 (kebab-case,记得用引号括起来) 来命名。
绑定style有两种方式:对象语法,数组语法。
① 对象语法:
② 数组语法: :style 的数组语法可以将多个样式对象应用到同一个元素上
在某些情况下,我们属性的名称可能也不是固定的。
前面我们无论绑定src、href、class、style,属性名称都是固定的,如果属性名称不是固定的,我们可以使用 :=“值” 的格式来定义,这种绑定的方式,我们称之为动态绑定属性。
如果我们希望将一个对象的所有属性,绑定到元素上的所有属性,应该怎么做呢?非常简单,我们可以直接使用 v-bind 绑定一个对象。
如下:info对象会被拆解成div的各个属性。
前面我们绑定了元素的内容和属性,在前端开发中另外一个非常重要的特性就是交互。
在前端开发中,我们需要经常和用户进行各种各样的交互,这个时候,我们就必须监听用户发生的事件,比如点击、拖拽、键盘事件等等。
在Vue中如何监听事件呢?使用v-on指令。接下来我们来看一下v-on的用法:
我们可以使用v-on来监听一下点击的事件:
v-on:click可以写成@click,是它的语法糖写法:
当然,我们也可以绑定其他的事件:
如果我们希望一个元素绑定多个事件,这个时候可以传入一个对象:
当通过methods中定义方法,以供@click调用时,需要注意参数问题:
情况一:如果该方法不需要额外参数,那么方法后的()可以不添加,并且方法的实现不用参数,直接就可以打印event。
情况二:如果需要同时传入某个参数和event时,可以通过$event传入事件,并且方法的实现必须按顺序写明参数。
@keyup.enter 代表enter键弹起的时候会调用onEnter方法,我们一般在方法里面获取输入的值:
在某些情况下,我们需要根据当前的条件决定某些元素或组件是否渲染,这个时候我们就需要进行条件判断了。
Vue提供了下面的指令来进行条件判断:
下面我们来对它们进行学习。
v-if、v-else、v-else-if 用于根据条件来渲染某一块的内容,这些内容只有在条件为true时,才会被渲染出来,这三个指令与JavaScript的条件语句 if、else、else if 类似。
v-if 的渲染原理:v-if是惰性的,当条件为false时,其判断的内容完全不会被渲染或者会被销毁掉,当条件为true时,才会真正渲染条件块中的内容。
因为v-if是一个指令,所以必须将其添加到一个元素上,但是如果我们希望切换的是多个元素呢?
如果此时我们使用div包裹,div会被渲染到界面上来,但是我们并不希望div被渲染,这个时候,我们可以选择使用template,template元素可以当做不可见的包裹元素,并且 v-if 可以添加到 template 上,但是最终template不会被渲染出来,类似于小程序中的block。
v-show和v-if的用法看起来是一致的,也是根据一个条件决定是否显示元素或者组件。
首先,在用法上的区别:
其次,本质的区别:
开发中如何进行选择呢?
在真实开发中,我们往往会从服务器拿到一组数据,并且需要对其进行渲染。这个时候我们可以使用v-for来完成,v-for类似于JavaScript的for循环,可以用于遍历一组数据。
v-for的基本格式是 "item in 数组" ,数组通常是来自data或者prop,也可以是其他方式,item是我们给每项元素起的一个别名,这个别名可以自定来定义。
我们知道,在遍历一个数组的时候会经常需要拿到数组的索引,如果我们需要索引,可以使用格式 "(item, index) in 数组" ,注意顺序,数组元素项item在前面,索引项index在后面。
类似于v-if,你可以使用 template 元素来循环渲染一段包含多个元素的内容。
我们使用template来对多个元素进行包裹,而不是使用div来完成,因为div会被渲染,template不会被渲染。而且如果有ul,ul里面不推荐放div,只推荐放li。
Vue 将被侦听的数组的变更方法进行了包裹,所以它们也将会触发视图更新,这些被包裹过的方法包括:
上面的方法会直接修改原来的数组,所以视图会跟着更新。但是某些方法不会替换原来的数组,而是会生成新的数组,比如 filter()、concat() 和 slice(),这时候我们可以通过重新赋值的方式触发视图更新,如下:
在使用v-for进行列表渲染时,我们通常会给元素或者组件绑定一个key属性。
这个key属性有什么作用呢?
我们先来看一下官方的解释:key属性主要用在Vue的虚拟DOM算法,在新旧nodes对比时辨识VNodes。如果不使用key,Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法,而使用key时,它会基于key的变化重新排列元素顺序,并且会移除/销毁key不存在的元素。
官方的解释对于初学者来说并不好理解,比如下面的问题:
什么是新旧nodes,什么是VNode?
没有key的时候,如何尝试修改和复用的?
有key的时候,如何基于key重新排列的?
我们先来解释一下VNode的概念:
VNode的全称是Virtual Node,也就是虚拟节点。事实上,无论是组件还是元素,它们最终在Vue中表示出来的都是一个个VNode。VNode的本质是一个JavaScript的对象。
如果我们不只是一个简单的div,而是有一大堆的元素,那么它们应该会形成一个VNode Tree。
我们先来看一个案例:这个案例是当我们点击按钮时会在li中间插入一个f。
我们可以确定的是,这次更新对于ul和button是不需要进行更新,需要更新的是我们li的列表。在Vue中,对于相同父元素的子元素节点并不会重新渲染整个列表,因为对于列表中 a、b、c、d它们都是没有变化的。在操作真实DOM的时候,我们只需要在中间插入一个f的li即可。
那么Vue中对于列表的更新究竟是如何操作的呢?
Vue事实上会对于有key和没有key会调用两个不同的方法,有key,那么就调用 patchKeyedChildren方法,没有key,那么就调用 patchUnkeyedChildren方法。
没有key的diff算法:
我们会发现上面的diff算法效率并不高,c和d来说它们事实上并不需要有任何的改动,但是因为我们的c被f所使用了,所有后续所有的内容都要一次进行改动,并且最后进行新增。
有key的diff算法:
所以我们可以发现,Vue在进行diff算法的时候,会尽量利用我们的key来进行优化操作,在没有key的时候我们的效率是非常低效的,在进行插入或者重置顺序的时候,保持相同的key可以让diff算法更加的高效。
vite+vue3+threejs实现一个3D模型的展示案例
1.检查npm -v版本和使用对应的vite安装vue3项目
需要安装依赖:npm install
运行:npm run dev
目录结构:
2.threejs官网:
3.安装threejs
4.准备3D模型素材(我这里使用glb格式)和HDR图片,素材网上可以找有免费的。
5.在App.vue中绑定id,挂载,实例化使用
6.在项目中的src目录下创建utils目录,在utils目录下创建Base3d.js脚本
效果展示:手机模型已经加载至场景中,背景是hdr图。
功能展示:用户可以滑动滚轮将模型进行放大缩小,场景360度无死角旋转。
Vue案例:图片动态切换效果
这个实例的容器分为两大部分,一是左边的大图,二是右边的缩略图,效果图如下:
左边的大图会根据右边的缩略图进行左右滚动,图片的文字也会跟着发生变化,显示图片是第几张,文字也有一个效果,会先消失,然后等图片要切换完成后慢慢出现,缺点就是大图的宽是不能够自适应的,只能固定大小。
右边的缩略图会简体鼠标的滚动,跟着鼠标上下滑动,鼠标点击后图片会产生高亮还会有一个橙色的边框,左边的大图显示相应的图片,这边的缩略图的宽度是可以自适应的。
08《Vue 入门教程》Vue 事件处理
本小节我们介绍 Vue 中如何进行事件处理。在章节 2.2 中我们已经介绍了指令 v-on ,本章节我们将详细介绍在 v-on 的一些用法。包括如何传递参数、如何使用事件修饰符等。其中,事件修饰符是本章节的难点。事件修饰符很多,同学们不需要一下子都记住,只要学会如何使用它,在开发过程中如果有所遗忘,可以通过翻看文档来使用。
使用 v-on 指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。
实例演示
"运行案例" 可查看在线运行效果
代码解释: 在 html 第 3 行,我们使用 v-on 指令给 button 元素绑定来一个 click 事件,并在点击的时候执行 count + 1 的操作。
在上面的例子中,我们把事件处理函数直接写在模板中,然而许多事件处理的逻辑都很复杂,所以直接把JS代码写在 v-on 指令中有时并不可行,v-on 指令可以接收一个定义的方法来调用。示例如下:
实例演示
"运行案例" 可查看在线运行效果
代码解释: 在 html 第 3 行,我们使用 v-on 指令给 button 元素绑定来一个 click 事件,并在点击的时候执行 add 方法。 在 JS 代码第 9-11 行,我们定义了方法 add;触发该方法时给 count + 1。
有时候我们需要在事件触发的时候传递一些参数,
实例演示
"运行案例" 可查看在线运行效果
代码解释: 在 html 第 3 行,我们使用 v-on 指令给 button 元素绑定了一个 click 事件,并在点击的时候执行 add 方法。 在 JS 代码第 9-11 行,我们定义了方法 add;触发该方法时给 count + 1。
有时我们需要在内联语句处理器中访问原始的 DOM 事件。可以用特殊变量 $event 把它传入方法:
实例演示
"运行案例" 可查看在线运行效果
代码解释: 在上述 JS 代码第 9-12 行,我们定义了事件函数 setCount。 在按钮点击事件中,我们将 $event 对象传递给函数,因此,在函数 setCount 中可以访问到原生事件对象。
在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。实现方法就是在事件名称后面以后缀的形式添加指定的修饰符。
Vue 提供了以下事件修饰符:
接下来,我们用一个完整的示例来看下这些修饰符的使用方法。
实例演示
"运行案例" 可查看在线运行效果
代码解释: 代码第 4-7 行,stop 案例中,当我们给按钮 click 事件添加 .stop 修饰符之后,点击按钮,事件不会向上传递。 代码第 10-16 行,submit.prevent 案例中,当给 submit 事件添加 .prevent 修饰符之后,提交事件不再重载页面。 代码第 19-21 行,capture 案例中,我们给父容器添加了 capture 事件,当点击按钮的时候,会先触发 capture 中的事件函数,然后再触发按钮绑定的点击事件。 代码第 24-26 行,self 案例中,我们给父容器的点击事件添加了 .self 的修饰符,所以只有点击父容器的时候才会触发该方法,当点击按钮的时候并不会触发父容器绑定的事件。 代码第 29-31 行,once 案例中,我们给按钮的点击事件添加了 .once 的修饰符,所以只有首次点击按钮的时候会触发事件函数,再次点击之后将不会触发事件函数。
在监听键盘事件时,我们经常需要检查详细的按键。Vue 允许为 v-on 在监听键盘事件时添加按键修饰符:
为了在必要的情况下支持旧浏览器,Vue 提供了绝大多数常用的按键码的别名:
可以用如下修饰符来实现仅在按下相应按键时才触发鼠标或键盘事件的监听器。
注意:在 Mac 系统键盘上,meta 对应 command 键 ( )。在 Windows 系统键盘 meta 对应 Windows 徽标键 ( )。在 Sun 操作系统键盘上,meta 对应实心宝石键 ( )。在其他特定键盘上,尤其在 MIT 和 Lisp 机器的键盘、以及其后继产品,比如 Knight 键盘、space-cadet 键盘,meta 被标记为“META”。在 Symbolics 键盘上,meta 被标记为“META”或者“Meta”。
例如:
Vue提供了.exact修饰符,实现单独的系统按键的事件。
例如:
本节,我们带大家学习了事件处理。主要知识点有以下几点:

更多文章:
哪个兄弟给个地址呀(哪位兄弟能给个骑马与砍杀中国战场的下载地址啊)
2026年4月19日 06:28
西宁到青海湖包车多少钱(从西宁去青海湖,如果包车需要多少钱)
2026年5月14日 19:17
手机简历app制作软件免费(有没有能制作个人简历的手机app)
2026年5月4日 10:40

















