vue.js如何在网页中实现一个金属抛光质感的按钮
作者:饺子大魔王的男人 发布时间:2024-04-28 09:21:26
标签:vue.js,金属抛光质感,按钮
前言
诶?这有一个按钮(~ ̄▽ ̄)~,这是一个在html中实现的具有金属质感并且能镜面反射的按钮~
效果
电脑效果
手机效果
说明
主要思路是使用 navigator.mediaDevices.getUserMedia()
调用设备摄像头来实现镜面反射,css部分用到了filter
属性,后期可以根据需要调整它的属性值,做出更多反射效果。有了思路,实现起来还是比较简单的。
需要注意的是window.navigator.mediaDevices.getUserMedia()
只能在localhost
或https
下才能使用,否则会报错哦。
完整代码
index.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, minimum-scale=1.0, maximum-scale=1.0">
<script src="https://cdn.jsdelivr.net/npm/vue@2/dist/vue.js"></script>
<style>
body {
background-color: rgb(86, 86, 86);
}
:root {
--transition: 0.1s;
--border-radius: 56px;
}
.button-wrap {
margin: calc(30vh - 50px) auto 0;
width: 300px;
height: 100px;
position: relative;
transition: transform var(--transition), box-shadow var(--transition);
}
.button-wrap.pressed {
transform: translateZ(0) scale(0.98);
}
.button {
width: 100%;
height: 100%;
overflow: hidden;
border-radius: var(--border-radius);
box-shadow:
0px 0px 10px rgba(0, 0, 0, 0.6),
0px 0px 20px rgba(0, 0, 0, 0.4),
0px 0px 40px rgba(0, 0, 0, 0.2),
inset 0 2px 2px rgba(255, 255, 255, 0.8),
inset 0 -2px 2px rgba(255, 255, 255, 0.8);
transform: translateZ(0);
cursor: pointer;
}
.button.pressed {
box-shadow:
0px 0px 5px rgba(0, 0, 0, 0.6),
0px 0px 10px rgba(0, 0, 0, 0.4),
0px 0px 20px rgba(0, 0, 0, 0.2),
inset 0 2px 2px rgba(255, 255, 255, 0.8),
inset 0 -2px 2px rgba(255, 255, 255, 0.8);
}
.text {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
pointer-events: none;
color: rgba(0, 0, 0, 0.9);
font-size: 48px;
font-weight: bold;
text-shadow:
0px 2px 1px rgba(255, 255, 255, 0.3),
0px -2px 1px rgba(255, 255, 255, 0.3);
}
.text::selection {
background-color: transparent;
}
.button .button-reflection {
width: 100%;
height: 100%;
transform: scaleX(-1);
object-fit: cover;
opacity: 0.7;
filter: blur(2px) saturate(0.6) brightness(1.1);
object-position: 0 -100px;
}
</style>
</head>
<body>
<div id="app">
<div v-show="cameraOpened" :class="`button-wrap ${buttonPressed ? 'pressed' : ''}`">
<div :class="`button ${buttonPressed ? 'pressed' : ''}`" @mousedown="setButtonPressed(true)"
@mouseup="setButtonPressed(false)" @touchstart="setButtonPressed(true)" @touchend="setButtonPressed(false)">
<video class="button-reflection" ref="reflectionRef" />
</div>
<div class="text">Button</div>
</div>
</div>
<script>
new Vue({
el: '#app',
data: {
cameraOpened: false,
buttonPressed: false
},
mounted() {
const _this = this
navigator.mediaDevices.getUserMedia({
video: true,
audio: false
}).then((stream) => {
const video = this.$refs.reflectionRef
video.srcObject = stream;
video.onloadedmetadata = () => {
_this.cameraOpened = true
video.play()
}
})
},
methods: {
setButtonPressed(val) {
this.buttonPressed = val
}
}
})
</script>
</body>
</html>
来源:https://blog.csdn.net/u010726809/article/details/129584419


猜你喜欢
- 怎么样才能设计出漂亮的网页?怎么样才能做好网页设计工作,现在许多人还停留在网页制作的水平上,认为只要用好了网页制作软件,就能搞好网页设计了,
- 之前公司有个绘制实时盈利率折线图的需求,实现的还不错,今天来分享下vue+echarts实现动态折线图的方法。实现代码<templat
- 本文实例为大家分享了pygame实现俄罗斯方块的具体代码,供大家参考,具体内容如下import random, time, pygame,
- 介绍获取协程返回值的四种方式:1、通过ensure_future获取,本质是future对象中的result方2、使用loop自带的crea
- Python 定义了类型转换函数以将一种数据类型直接转换为另一种数据类型,这在日常和竞争性编程中很有用。本文旨在提供有关某些转换函数的信息。
- 有些 SQL Server 2000 Personal Edition 实例和 SQL Server 2000 Desktop Engine
- 安装库位置和显示方式简单总结:一、位置的不同 1.自带库在环境的 lib\\os.py&nb
- 本篇博客会介绍如何使用python在excel和csv里实现vlookup函数的功能,首先需要简单了解一下python如何操作excel1.
- 本文实例讲述了PHP设计模式之装饰器模式定义与用法。分享给大家供大家参考,具体如下:什么是装饰器模式作为一种结构型模式, 装饰器(Decor
- MySQL 5.0.16的乱码问题可以用下面的方法解决:1.设置phpMyAdminLanguage:Chinese simplified
- 服务:# chkconfig --list 列出所有系统服务# chkconfig --list | grep o
- 所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。我们永远不
- 我查了一下解决这个问题的办法,一般是设定全局变量,今天介绍一种新办法上代码difrouters.pyfrom flask import Fl
- 示例from optparse import OptionParser[...]def main():
- 一个改进的仿google页面拖拽效果,移植方便。web2.0网站经常会用有这个拖拽页面布局的功能,如果你也想给你的网站加上这个有趣的功能,不
- 在使用matplotlib模块时画坐标图时,往往需要对坐标轴设置很多参数,这些参数包括横纵坐标轴范围、坐标轴刻度大小、坐标轴名称等 在mat
- NicEdit的Javascript集成到任何网站在几秒钟内作出的任何元素/区块编辑或转换标准textareas来丰富文本编辑。 How t
- 这篇文章主要介绍了Python测试线程应用程序过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋
- 近来在做数据库设计,有时候真弄不清SQL2000里的数据类型,所以摘了这篇文章。 (1)char、varchar、text和nchar、nv
- 前言在Python开发中,有些情况下,我们可能面临在一台机器上同时安装多版本Python的需求。比如:有多个Python项目,每个项目依赖不