Fab 悬浮按钮

2023-12-25 09:20
文章标签 按钮 悬浮 fab

本文主要是介绍Fab 悬浮按钮,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

声明,参考:https://ext.dcloud.net.cn/plugin?id=144

1162622-20190904151745006-1803606887.png

  • 在 template 中使用

<template><view><uni-fab:pattern="pattern":content="content":horizontal="horizontal":vertical="vertical":direction="direction"@trigger="trigger"></uni-fab></view>
</template>

  • 在 javascript 中使用
<script>import uniFab from '@/components/uni-fab/uni-fab.vue';export default {data() {return {horizontal: 'left',vertical: 'top',direction: 'horizontal',pattern: {color: '#7A7E83',backgroundColor: '#fff',selectedColor: '#FF0000',buttonColor:"#007AFF",},content: [{iconPath: '/static/img/tabbar/guanzhu.png',selectedIconPath: '/static/img/tabbar/guanzhuactive.png',text: '组件',active: false},{iconPath: '/static/img/tabbar/home.png',selectedIconPath: '/static/img/tabbar/homeactive.png',text: 'API',active: false},{iconPath: '/static/img/tabbar/me.png',selectedIconPath: '/static/img/tabbar/meactive.png',text: '模版',active: false}]}},methods: {trigger(e) {let other = this.content.map((d, i) => {d.active = i== e.index})uni.showToast({title:'选择了'+this.content[e.index].text})}},components: {uniFab}}
</script>

  • 最后附上uni-fab.vue

<template><view><viewclass="fab-box fab" :class="{leftBottom: leftBottom,rightBottom: rightBottom,leftTop: leftTop,rightTop: rightTop}"><viewclass="fab-circle":class="{left: horizontal === 'left' && direction === 'horizontal',top: vertical === 'top' && direction === 'vertical',bottom: vertical === 'bottom' && direction === 'vertical',right: horizontal === 'right' && direction === 'horizontal'}":style="{ 'background-color': styles.buttonColor }"@click="open"><text class="icon icon-jia" :class="{ active: showContent }"></text></view><viewclass="fab-content":class="{left: horizontal === 'left',right: horizontal === 'right',flexDirection: direction === 'vertical',flexDirectionStart: flexDirectionStart,flexDirectionEnd: flexDirectionEnd}":style="{ width: boxWidth, height: boxHeight, background: styles.backgroundColor }"><view v-if="flexDirectionStart || horizontalLeft" class="fab-item first"></view><viewclass="fab-item"v-for="(item, index) in content":key="index":class="{ active: showContent }":style="{color: item.active ? styles.selectedColor : styles.color}"@click="taps(index, item)"><imageclass="content-image":src="item.active ? item.selectedIconPath : item.iconPath"mode=""></image><text class="text">{{ item.text }}</text></view><view v-if="flexDirectionEnd || horizontalRight" class="fab-item first"></view></view></view></view>
</template><script>
export default {props: {pattern: {type: Object,default: () => {return {};}},horizontal: {type: String,default: 'left'},vertical: {type: String,default: 'bottom'},direction: {type: String,default: 'horizontal'},content: {type: Array,default: () => {return [];}}},data() {return {fabShow: false,flug: true,showContent: false,styles: {color: '#3c3e49',selectedColor: '#007AFF',backgroundColor: '#fff',buttonColor: '#3c3e49'}};},created() {if (this.top === 0) {this.fabShow = true;}// 初始化样式this.styles = Object.assign({}, this.styles, this.pattern);},methods: {open() {this.showContent = !this.showContent;},/*** 按钮点击事件*/taps(index, item) {this.$emit('trigger', {index,item});this.showContent = false;},/*** 获取 位置信息*/getPosition(types, paramA, paramB) {if (types === 0) {return this.horizontal === paramA && this.vertical === paramB;} else if (types === 1) {return this.direction === paramA && this.vertical === paramB;} else if (types === 2) {return this.direction === paramA && this.horizontal === paramB;} else {return this.showContent && this.direction === paramA? this.contentWidth: this.contentWidthMin;}}},watch: {pattern(newValue, oldValue) {console.log(JSON.stringify(newValue));this.styles = Object.assign({}, this.styles, newValue);}},computed: {contentWidth(e) {return uni.upx2px((this.content.length + 1) * 110 + 20) + 'px';},contentWidthMin() {return uni.upx2px(110) + 'px';},// 动态计算宽度boxWidth() {return this.getPosition(3, 'horizontal');},// 动态计算高度boxHeight() {return this.getPosition(3, 'vertical');},// 计算左下位置leftBottom() {return this.getPosition(0, 'left', 'bottom');},// 计算右下位置rightBottom() {return this.getPosition(0, 'right', 'bottom');},// 计算左上位置leftTop() {return this.getPosition(0, 'left', 'top');},rightTop() {return this.getPosition(0, 'right', 'top');},flexDirectionStart() {return this.getPosition(1, 'vertical', 'top');},flexDirectionEnd() {return this.getPosition(1, 'vertical', 'bottom');},horizontalLeft() {return this.getPosition(2, 'horizontal', 'left');},horizontalRight() {return this.getPosition(2, 'horizontal', 'right');}}
};
</script><style scoped>
.fab-box {position: fixed;display: flex;justify-content: center;align-items: center;z-index: 2;
}.fab-box.top {width: 60upx;height: 60upx;right: 30upx;bottom: 60upx;border: 1px #5989b9 solid;background: #6699cc;border-radius: 10upx;color: #fff;transition: all 0.3;opacity: 0;
}.fab-box.active {opacity: 1;
}.fab-box.fab {z-index: 10;
}.fab-box.fab.leftBottom {left: 30upx;bottom: 60upx;
}.fab-box.fab.leftTop {left: 30upx;top: 80upx;/* #ifdef H5 */top: calc(80upx + var(--window-top));/* #endif */
}.fab-box.fab.rightBottom {right: 30upx;bottom: 60upx;
}.fab-box.fab.rightTop {right: 30upx;top: 80upx;/* #ifdef H5 */top: calc(80upx + var(--window-top));/* #endif */
}.fab-circle {display: flex;justify-content: center;align-items: center;position: absolute;width: 110upx;height: 110upx;background: #3c3e49;/* background: #5989b9; */border-radius: 50%;box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.2);z-index: 11;
}.fab-circle.left {left: 0;
}.fab-circle.right {right: 0;
}.fab-circle.top {top: 0;
}.fab-circle.bottom {bottom: 0;
}.fab-circle .icon-jia {color: #ffffff;font-size: 50upx;transition: all 0.3s;
}.fab-circle .icon-jia.active {transform: rotate(135deg);
}.fab-content {background: #6699cc;box-sizing: border-box;display: flex;border-radius: 100upx;overflow: hidden;box-shadow: 0 0 5px 2px rgba(0, 0, 0, 0.1);transition: all 0.2s;width: 110upx;
}.fab-content.left {justify-content: flex-start;
}.fab-content.right {justify-content: flex-end;
}.fab-content.flexDirection {flex-direction: column;justify-content: flex-end;
}.fab-content.flexDirectionStart {flex-direction: column;justify-content: flex-start;
}.fab-content.flexDirectionEnd {flex-direction: column;justify-content: flex-end;
}.fab-content .fab-item {display: flex;flex-direction: column;justify-content: center;align-items: center;width: 110upx;height: 110upx;font-size: 24upx;color: #fff;opacity: 0;transition: opacity 0.2s;
}.fab-content .fab-item.active {opacity: 1;
}.fab-content .fab-item .content-image {width: 50upx;height: 50upx;margin-bottom: 5upx;
}.fab-content .fab-item.first {width: 110upx;
}@font-face {font-family: 'iconfont';src: url('https://at.alicdn.com/t/font_1028200_xhbo4rn58rp.ttf?t=1548214263520')format('truetype');
}.icon {font-family: 'iconfont' !important;font-size: 16px;font-style: normal;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;
}.icon-jia:before {content: '\e630';
}.icon-arrow-up:before {content: '\e603';
}
</style>

转载于:https://www.cnblogs.com/neo-java/p/11459366.html

这篇关于Fab 悬浮按钮的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/535005

相关文章

C# 防止按钮botton重复“点击”的方法

在使用C#的按钮控件的时候,经常我们想如果出现了多次点击的时候只让其在执行的时候只响应一次。这个时候很多人可能会想到使用Enable=false, 但是实际情况是还是会被多次触发,因为C#采用的是消息队列机制,这个时候我们只需要在Enable = true 之前加一句 Application.DoEvents();就能达到防止重复点击的问题。 private void btnGenerateSh

PNG透明背景按钮的实现(MFC)

问题描述: 当前要在对话框上添加一个以两个PNG图片作为背景的按钮,PNG图的背景是透明的,按钮也要做出相同的透明效果。并且鼠标不在按钮上时,按钮显示"bg1.png";鼠标移动到按钮上时,按钮显示"bg2.png" 开发环境为VS2010。 解决办法: 使用GDI+库装载PNG图片,并使用MFC Button Control和CMFCButton类结合,调用CMFCButton

龙芯+FreeRTOS+LVGL实战笔记(新)——05部署主按钮

本专栏是笔者另一个专栏《龙芯+RT-Thread+LVGL实战笔记》的姊妹篇,主要的区别在于实时操作系统的不同,章节的安排和任务的推进保持一致,并对源码做了改进和优化,各位可以先到本人主页下去浏览另一专栏的博客列表(目前已撰写36篇,图1所示),再决定是否订阅。此外,也可以前往本人在B站的视频合集(图2所示)观看所有演示视频,合集首个视频链接为: 借助RT-Thread和LVGL

致远个性化之--发起流程页面,去掉【查看流程】按钮

需求 近期在做的项目中,遇到一个需求,想把发起流程页面中的【查看流程】按钮去掉,只让员工预测流程,知道自己的事项流程走向,不让看全局流程图。包含PC端和移动端,以及微协同端。 如下图效果示例: 实现 此需求,只能通过修改页面代码实现。在此不分析实现过程,现把具体实现方式呈现如下,各位如有需求可参照设置。适用版本V9.0,其他版本未进行测试,估计不会有大的差别! PC端 找到文件

如何在Excel中创建一个VBA宏,并设置一个按钮来执行这个宏

下面是一个详细的步骤指南 步骤1:创建VBA宏 1. 打开Excel并按 `Alt + F11` 打开VBA编辑器。 2. 在VBA编辑器中,选择 `Insert` > `Module` 来插入一个新的模块。 3. 将以下代码粘贴到模块中: ```vba Sub CreateNewSheet()' 声明一个工作表对象Dim newSheet As Worksheet' 添加一个新的工作表S

Vue3实现点击按钮下载头像功能

要实现的效果 点击头像右上角弹出选项,点击保存图片可以把图片下载保存到本地 实现方式关键代码 1.第一种,直接创建a标签给头像地址。进行下载 // 创建一个隐藏的 <a> 标签const link = document.createElement("a");link.href = headPic; // 设置为图片的 URLlink.download = "avatar.jpg"; //

Android ToggleButton 开关按钮

ToggleButton相关属性,方法android:textOn="On"android:textOff="Off"android:checked="true"setChecked(boolean) package shortcut.song.com.myapplication;import android.support.v7.app.AppCompatActivity;impo

Android RadioButton 单选按钮

RadioGroup 单选按钮组, 可以包含多个单选按钮,当单选按钮选中状态改变时会触发setOnCheckedChangeListener package shortcut.song.com.myapplication;import android.graphics.Color;import android.support.v7.app.AppCompatActivity;imp

delphi如何给按钮添加单键快捷键(F1~F12)

用action 讲按钮窗体的Keypreview设为True,然后加如下代码 Delphi/Pascal code ? 1 2 3 4 5 6 procedure  TForm1 . FormKeyDown(Sender: TObject;  var  Key:  Word ;    Shift: TShiftState); begin    i

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释)

elementUI table 给表头添加气泡显示(鼠标悬浮显示注释) 前言:文档显示:(使用插槽,我看看到底是怎么个事儿)文档代码:修改后的效果:页面效果: 前言: 公司出现这样的需求,产品要求给表格的表头部分字段添加解释说明,让用户知道这个字段的详细含义。之前倒是没有遇到过类似的问题,并不清楚怎么添加,于是去看element UI 组件文档。 element UI 文档