Vue3浮动按钮(FloatButton)

news2024/11/26 2:40:56

效果如下图:在线预览

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

APIs

FloatButton

参数说明类型默认值
left按钮定位的左边距,单位 pxnumber | stringundefined
right按钮定位的右边距,单位 pxnumber | string24
top按钮定位的上边距,单位 pxnumber | stringundefined
bottom按钮定位的下边距,单位 pxnumber | string48
width浮动按钮宽度,单位 pxnumber | string40
height浮动按钮高度,单位 pxnumber | string40
type浮动按钮类型‘default’ | ‘primary’‘default’
shape浮动按钮形状‘circle’ | ‘square’‘circle’
icon浮动按钮图标string | slotundefined
description文字描述信息string | slotundefined
href点击跳转的地址,指定此属性按钮的行为和 a 链接一致stringundefined
target相当于 a 标签的 target 属性,href 存在时生效‘self’ | ‘_blank’‘self’
menuTrigger浮动按钮菜单显示的触发方式‘click’ | ‘hover’undefined
tooltip气泡卡片的内容sring | slotundefined
tooltipPropsTooltip 组件属性配置,参考 Tooltip Propsobject{}
badgeProps带徽标的浮动按钮(不支持 status 以及相关属性),参考 Badge Propsobject{}

Events

名称说明类型
click点击浮动按钮时的回调(e: Event) => void
openChange浮动按钮菜单展开收起时的回调(open: boolean) => void

创建浮动按钮组件FloatButton.vue

其中引入使用了以下组件和工具函数:

  • Vue3文字提示(Tooltip)
  • Vue3徽标(Badge)
<script setup lang="ts">
import { ref, computed, watch } from 'vue'
import Tooltip from '../tooltip'
import Badge from '../badge'
import { useSlotsExist } from '../utils'
interface Props {
  left?: number | string // 按钮定位的左边距,单位 px
  right?: number | string // 按钮定位的右边距,单位 px
  top?: number | string // 按钮定位的上边距,单位 px
  bottom?: number | string // 按钮定位的下边距,单位 px
  width?: number | string // 浮动按钮宽度,单位 px
  height?: number | string // 浮动按钮高度,单位 px
  type?: 'default' | 'primary' // 浮动按钮类型
  shape?: 'circle' | 'square' // 浮动按钮形状
  icon?: string // 浮动按钮图标 string | slot
  description?: string // 文字描述信息 string | slot
  href?: string // 点击跳转的地址,指定此属性按钮的行为和 a 链接一致
  target?: '_self' | '_blank' // 相当于 a 标签的 target 属性,href 存在时生效
  menuTrigger?: 'click' | 'hover' // 浮动按钮菜单显示的触发方式
  tooltip?: string // 气泡卡片的内容 string | slot
  tooltipProps?: object // Tooltip 组件属性配置,参考 Tooltip Props
  badgeProps?: object // 带徽标的浮动按钮(不支持 status 以及相关属性),参考 Badge Props
}
const props = withDefaults(defineProps<Props>(), {
  left: undefined,
  right: 24,
  top: undefined,
  bottom: 48,
  width: 40,
  height: 40,
  type: 'default',
  shape: 'circle',
  icon: undefined,
  description: undefined,
  href: undefined,
  target: '_self',
  menuTrigger: undefined,
  tooltip: undefined,
  tooltipProps: () => ({}),
  badgeProps: () => ({})
})
const showMenu = ref(false)
const emits = defineEmits(['click', 'openChange'])
const slotsExist = useSlotsExist(['icon', 'description', 'tooltip', 'menu'])
const floatBtnWidth = computed(() => {
  if (typeof props.width === 'number') {
    return props.width + 'px'
  }
  return props.width
})
const floatBtnHeight = computed(() => {
  if (typeof props.height === 'number') {
    return props.height + 'px'
  }
  return props.height
})
const floatBtnLeft = computed(() => {
  if (typeof props.left === 'number') {
    return props.left + 'px'
  }
  return props.left
})
const floatBtnRight = computed(() => {
  if (props.left) {
    return null
  } else {
    if (typeof props.right === 'number') {
      return props.right + 'px'
    }
    return props.right
  }
})
const floatBtnTop = computed(() => {
  if (typeof props.top === 'number') {
    return props.top + 'px'
  }
  return props.top
})
const floatBtnBottom = computed(() => {
  if (props.top) {
    return null
  } else {
    if (typeof props.bottom === 'number') {
      return props.bottom + 'px'
    }
    return props.bottom
  }
})
const showDescription = computed(() => {
  return slotsExist.description || props.description
})
const showTooltip = computed(() => {
  return slotsExist.tooltip || props.tooltip
})
watch(showMenu, (to) => {
  emits('openChange', to)
})
function onClick(e: Event) {
  emits('click', e)
  if (props.menuTrigger === 'click' && slotsExist.menu) {
    showMenu.value = !showMenu.value
  }
}
</script>
<template>
  <a
    tabindex="0"
    class="m-float-btn"
    :class="`float-btn-${type} float-btn-${shape}`"
    :style="`
      --float-btn-width: ${floatBtnWidth};
      --float-btn-height: ${floatBtnHeight};
      --float-btn-left: ${floatBtnLeft};
      --float-btn-right: ${floatBtnRight};
      --float-btn-top: ${floatBtnTop};
      --float-btn-bottom: ${floatBtnBottom}
    `"
    :href="href ? href : 'javascript:void(0);'"
    :target="href ? target : '_self'"
    @click="onClick"
    @blur="menuTrigger === 'click' ? (showMenu = false) : null"
    @mouseenter="menuTrigger === 'hover' ? (showMenu = true) : null"
    @mouseleave="menuTrigger === 'hover' ? (showMenu = false) : null"
  >
    <Tooltip v-bind="tooltipProps" class="float-btn-tooltip">
      <template v-if="showTooltip" #tooltip>
        <slot name="tooltip">{{ tooltip }}</slot>
      </template>
      <Badge v-bind="badgeProps">
        <div class="float-btn-body">
          <div class="float-btn-content">
            <div v-if="slotsExist.icon" class="float-btn-icon">
              <Transition name="fade">
                <slot v-if="!showMenu" name="icon"></slot>
                <svg
                  v-else
                  class="close-svg"
                  focusable="false"
                  data-icon="close"
                  width="1em"
                  height="1em"
                  fill="currentColor"
                  aria-hidden="true"
                  fill-rule="evenodd"
                  viewBox="64 64 896 896"
                >
                  <path
                    d="M799.86 166.31c.02 0 .04.02.08.06l57.69 57.7c.04.03.05.05.06.08a.12.12 0 010 .06c0 .03-.02.05-.06.09L569.93 512l287.7 287.7c.04.04.05.06.06.09a.12.12 0 010 .07c0 .02-.02.04-.06.08l-57.7 57.69c-.03.04-.05.05-.07.06a.12.12 0 01-.07 0c-.03 0-.05-.02-.09-.06L512 569.93l-287.7 287.7c-.04.04-.06.05-.09.06a.12.12 0 01-.07 0c-.02 0-.04-.02-.08-.06l-57.69-57.7c-.04-.03-.05-.05-.06-.07a.12.12 0 010-.07c0-.03.02-.05.06-.09L454.07 512l-287.7-287.7c-.04-.04-.05-.06-.06-.09a.12.12 0 010-.07c0-.02.02-.04.06-.08l57.7-57.69c.03-.04.05-.05.07-.06a.12.12 0 01.07 0c.03 0 .05.02.09.06L512 454.07l287.7-287.7c.04-.04.06-.05.09-.06a.12.12 0 01.07 0z"
                  ></path>
                </svg>
              </Transition>
            </div>
            <div v-if="showDescription" class="float-btn-description">
              <slot name="description">{{ description }}</slot>
            </div>
          </div>
        </div>
      </Badge>
    </Tooltip>
    <Transition v-show="showMenu" name="move">
      <div class="float-btn-menu">
        <slot name="menu"></slot>
      </div>
    </Transition>
  </a>
</template>
<style lang="less" scoped>
.fade-move,
.fade-enter-active,
.fade-leave-active {
  transition:
    transform 0.3s cubic-bezier(0.4, 0, 0.2, 1),
    opacity 0.3s cubic-bezier(0.4, 0, 0.2, 1);
}
.fade-enter-from,
.fade-leave-to {
  transform: scale(0.75);
  opacity: 0;
}
.fade-leave-active {
  position: absolute;
}
.move-enter-active,
.move-leave-active {
  transform-origin: 0 0;
  transition: all 0.3s cubic-bezier(0.78, 0.14, 0.15, 0.86);
}
.move-leave-active {
  pointer-events: none;
}
.move-enter-from,
.move-leave-to {
  transform: translate3d(0, var(--float-btn-height), 0);
  transform-origin: 0 0;
  opacity: 0;
}
.m-float-btn {
  position: fixed;
  left: var(--float-btn-left);
  right: var(--float-btn-right);
  top: var(--float-btn-top);
  bottom: var(--float-btn-bottom);
  z-index: 99;
  font-size: 14px;
  color: rgba(0, 0, 0, 0.88);
  line-height: 1.5714285714285714;
  display: inline-block;
  width: var(--float-btn-width);
  height: var(--float-btn-height);
  cursor: pointer;
  box-shadow:
    0 6px 16px 0 rgba(0, 0, 0, 0.08),
    0 3px 6px -4px rgba(0, 0, 0, 0.12),
    0 9px 28px 8px rgba(0, 0, 0, 0.05);
  .float-btn-tooltip {
    width: 100%;
    height: 100%;
    :deep(.tooltip-content) {
      width: 100%;
      height: 100%;
      .m-badge {
        vertical-align: top;
        width: 100%;
        height: 100%;
      }
    }
  }
  .float-btn-body {
    position: relative;
    width: 100%;
    height: 100%;
    display: flex;
    justify-content: center;
    align-items: center;
    transition: all 0.2s;
    .float-btn-content {
      overflow: hidden;
      text-align: center;
      min-height: var(--float-btn-height);
      display: flex;
      flex-direction: column;
      justify-content: center;
      align-items: center;
      padding: 2px 4px;
      .float-btn-icon {
        text-align: center;
        margin: auto;
        font-size: 18px;
        line-height: 1;
        .close-svg {
          display: inline-block;
          vertical-align: bottom;
        }
        :deep(svg) {
          fill: currentColor;
        }
        :deep(img) {
          vertical-align: bottom;
        }
      }
    }
  }
  .float-btn-menu {
    position: absolute;
    bottom: 100%;
    display: block;
    z-index: -1;
    .m-float-btn {
      position: static;
    }
    & > * {
      margin-bottom: 16px;
    }
  }
}
.float-btn-default {
  background-color: #ffffff;
  transition: background-color 0.2s;
  & > .float-btn-tooltip {
    .float-btn-body {
      background-color: #ffffff;
      transition: background-color 0.2s;
      &:hover {
        background-color: rgba(0, 0, 0, 0.06);
      }
      .float-btn-content {
        .float-btn-icon {
          color: rgba(0, 0, 0, 0.88);
        }
        .float-btn-description {
          display: flex;
          align-items: center;
          line-height: 16px;
          color: rgba(0, 0, 0, 0.88);
          font-size: 12px;
        }
      }
    }
  }
}

.float-btn-primary {
  background-color: @themeColor;
  & > .float-btn-tooltip {
    .float-btn-body {
      background-color: @themeColor;
      transition: background-color 0.2s;
      &:hover {
        background-color: #4096ff;
      }
      .float-btn-content {
        .float-btn-icon {
          color: #fff;
        }
      }
      .float-btn-description {
        display: flex;
        align-items: center;
        line-height: 16px;
        color: #fff;
        font-size: 12px;
      }
    }
  }
}
.float-btn-circle {
  border-radius: 50%;
  .m-badge {
    :deep(.only-dot) {
      top: 5.857864376269049px;
      right: 5.857864376269049px;
    }
  }
  & > .float-btn-tooltip {
    .float-btn-body {
      border-radius: 50%;
    }
  }
}
.float-btn-square {
  height: auto;
  min-height: var(--float-btn-height);
  border-radius: 8px;
  & > .float-btn-tooltip {
    .float-btn-body {
      height: auto;
      border-radius: 8px;
    }
  }
}
</style>

在要使用的页面引入

其中引入使用了以下组件:

  • Vue3卡片(Card)
<script setup lang="ts">
import FloatButton from './FloatButton.vue'
import {
  GlobalOutlined,
  QuestionCircleOutlined,
  CustomerServiceOutlined,
  StarFilled,
  SettingOutlined,
  SketchOutlined,
  MessageOutlined,
  CommentOutlined
} from '@ant-design/icons-vue'
function onClick(e: Event) {
  console.log('click', e)
}
function onOpenChange(open: boolean) {
  console.log('openChange', open)
}
</script>
<template>
  <div>
    <h1>{{ $route.name }} {{ $route.meta.title }}</h1>
    <h2 class="mt30 mb10">基本使用</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton @click="onClick">
        <template #icon>
          <GlobalOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">位置</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton>
        <template #icon>
          <MessageOutlined />
        </template>
      </FloatButton>
      <FloatButton shape="square" :top="48">
        <template #icon>
          <CommentOutlined />
        </template>
      </FloatButton>
      <FloatButton type="primary" :left="24">
        <template #icon>
          <MessageOutlined />
        </template>
      </FloatButton>
      <FloatButton type="primary" shape="square" :left="24" :top="48">
        <template #icon>
          <CommentOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">尺寸</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton :width="56" :height="56" :right="120">
        <template #icon>
          <MessageOutlined style="font-size: 24px" />
        </template>
      </FloatButton>
      <FloatButton type="primary" shape="square" :width="56" :height="56">
        <template #icon>
          <CommentOutlined style="font-size: 24px" />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">类型</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton :right="80">
        <template #icon>
          <QuestionCircleOutlined />
        </template>
      </FloatButton>
      <FloatButton type="primary">
        <template #icon>
          <QuestionCircleOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">形状</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton type="primary" :right="80">
        <template #icon>
          <CustomerServiceOutlined />
        </template>
      </FloatButton>
      <FloatButton type="primary" shape="square">
        <template #icon>
          <CustomerServiceOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">图标</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton type="primary" :right="80">
        <template #icon>
          <StarFilled spin style="color: gold" />
        </template>
      </FloatButton>
      <FloatButton shape="square">
        <template #icon>
          <SettingOutlined style="color: #1677ff" />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">文字描述信息</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton shape="square" description="HELP" :right="136">
        <template #icon>
          <GlobalOutlined />
        </template>
      </FloatButton>
      <FloatButton shape="square" description="HELP INFO" :right="80" />
      <FloatButton type="primary" shape="square" description="客服">
        <template #icon>
          <CustomerServiceOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">链接跳转</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton href="https://themusecatcher.github.io/vue-amazing-ui/" :right="80">
        <template #icon>
          <img style="width: 1em; height: 1em" src="https://themusecatcher.github.io/vue-amazing-ui/amazing-logo.svg" />
        </template>
      </FloatButton>
      <FloatButton
        type="primary"
        shape="square"
        description="CSDN"
        href="https://blog.csdn.net/Dandrose"
        target="_blank"
      />
    </Card>
    <h2 class="mt30 mb10">菜单模式</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton shape="square" description="HELP" :right="80" menu-trigger="click" @openChange="onOpenChange">
        <template #icon>
          <CustomerServiceOutlined />
        </template>
        <template #menu>
          <FloatButton shape="square">
            <template #icon>
              <MessageOutlined />
            </template>
          </FloatButton>
          <FloatButton>
            <template #icon>
              <CommentOutlined />
            </template>
          </FloatButton>
        </template>
      </FloatButton>
      <FloatButton type="primary" menu-trigger="hover" @openChange="onOpenChange">
        <template #icon>
          <CustomerServiceOutlined />
        </template>
        <template #menu>
          <FloatButton>
            <template #icon>
              <MessageOutlined />
            </template>
          </FloatButton>
          <FloatButton>
            <template #icon>
              <CommentOutlined />
            </template>
          </FloatButton>
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">气泡卡片</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton tooltip="Diamond" :right="80">
        <template #icon>
          <SketchOutlined />
        </template>
      </FloatButton>
      <FloatButton
        type="primary"
        tooltip="Diamond"
        :tooltip-props="{
          bgColor: '#fff',
          tooltipStyle: {
            fontWeight: 500,
            color: 'rgba(0, 0, 0, 0.88)'
          }
        }"
      >
        <template #icon>
          <SketchOutlined />
        </template>
      </FloatButton>
    </Card>
    <h2 class="mt30 mb10">徽标数</h2>
    <Card width="50%" style="height: 300px; transform: translate(0)">
      <FloatButton shape="circle" :badge-props="{ dot: true }" :right="136">
        <template #icon>
          <MessageOutlined />
        </template>
      </FloatButton>
      <FloatButton :badge-props="{ value: 5, color: 'blue' }" :bottom="104">
        <template #icon>
          <CommentOutlined />
        </template>
      </FloatButton>
      <FloatButton :badge-props="{ value: 5 }">
        <template #icon>
          <CommentOutlined />
        </template>
      </FloatButton>
      <FloatButton :badge-props="{ value: 123 }" :right="80">
        <template #icon>
          <CommentOutlined />
        </template>
      </FloatButton>
    </Card>
  </div>
</template>

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优惠点餐api接口对接的具体步骤是什么?

优惠点餐API接口对接的具体步骤通常包括以下几个阶段&#xff1a; 需求分析&#xff1a;明确对接的目标和需求&#xff0c;例如实现在线点餐、订单管理、支付集成等 。选择API服务提供商&#xff1a;根据业务需求选择合适的点餐API服务提供商 。注册和获取API密钥&#xff1a;…

channel是pypi与 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f的区别。

pypi.org 是 PyPI 的默认源https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f 是清华大学开源软件镜像站提供的 Anaconda 镜像源之一。 pypi.org&#xff1a;通常通过 pip 工具来使用。 https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-f&#xff1a;…

力扣HOT100合集

力扣HOT100 - 1. 两数之和 解题思路&#xff1a; 解法一&#xff1a;暴力 class Solution {public int[] twoSum(int[] nums, int target) {int n nums.length;for (int i 0; i < n; i)for (int j i 1; j < n; j) {if (target nums[i] nums[j])return new int[] …

docker compose一键部署容器监控 CAdvisor+InfluxDB+Granfana

docker compose一键部署容器监控 CAdvisorInfluxDBGranfana CAdvisor监控收集InfluxDB存储数据Granfana展示图表 1、原生命令 通过docker stats 命令可以查看当前宿主机上所有创建的容器的CPU,内存和网络流量等信息 docker stats 缺点&#xff1a;只能查看当前宿主机的全部…

Pymysql cur.fetchall() 返回 None

大家在pymysql 的 cur.fetchall() 函数通常用于获取执行 SQL 查询后的所有结果。该函数返回一个包含查询结果的元组列表。如果 cur.fetchall() 返回 None&#xff0c;可能是由于以下多种问题导致的。 1、问题背景 在使用 Pymysql 库连接到 MySQL 数据库时&#xff0c;遇到这样…

革新锂电池PACK线:重塑生产效能新高度

背景&#xff1a; 在新能源产业的浪潮中&#xff0c;锂电池作为电动汽车、储能系统的核心部件&#xff0c;其生产效率与质量直接关系到整个产业链的竞争力。然而&#xff0c;在锂电池PACK线的生产、运输、检测这一完整流程中&#xff0c;运输环节往往面临着诸多挑战&#xff0…

探索多模态大模型的最佳技术路线

视觉-语言模型&#xff08;Vision-Language Models, VLMs&#xff09;领域正迅速发展&#xff0c;但在数据、架构和训练方法等关键方面还未达成共识。本文旨在为构建VLM提供指南&#xff0c;概述当前的最先进方法&#xff0c;指出各自的优缺点&#xff0c;解决该领域的主要挑战…

AD的多边形覆铜挖空

针对多层板中没有网络的焊盘&#xff0c;需要覆铜挖空&#xff0c;避免与GND连接。同时&#xff0c;大多数情况下&#xff0c;我们的板子上都有定位孔&#xff0c;如果覆铜边界和定位孔边界距离过近&#xff0c;当拧螺丝时&#xff0c;螺丝会压在覆铜上&#xff0c;甚至在螺丝旋…

漫途以产品为导向,为集成商客户提供稳定、可靠的物联网终端设备!

无锡漫途科技有限公司成立于2014年8月至今已经十年有余&#xff0c;在这期间公司始终把“1344”战略作为核心指导方向。 “1”代表只做一件事&#xff0c;即以“物联网基础大数据服务商”为主要业务定位&#xff0c;围绕中国制造 2025&#xff0c;推动中国工业智能化转型升级&…

安卓投屏工具:QtScrapy

QtScrcpy可以通过USB(或通过TCP/IP)连接Android设备&#xff0c;并进行显示和控制。不需要root权限。   项目地址https://gitee.com/leihongping/QtScrcpy

Onebound代购系统丨系统建站丨返海淘系统用途

Onebound代购系统、系统建站以及返海淘系统的用途&#xff0c;可以详细阐述如下&#xff1a; Onebound代购系统 Onebound代购系统主要用于连接海外消费者与中国电商平台&#xff08;如1688、淘宝、天猫、京东等&#xff09;&#xff0c;为消费者提供商品搜索、下单、支付、物…

学习threejs,网格深度材质MeshDepthMaterial

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️网格深度材质MeshDepthMate…

Vert.x,Web - Router

Vert.x-Web简介 Vert.x-Web是用于构建Web应用程序的一系列模块&#xff0c;可以用来构建经典的服务端Web应用&#xff0c; RESTful应用&#xff0c; 实时的(服务端推送)Web应用&#xff0c;或任何您所能想到的Web应用类型。Vert.x Web的设计是强大的&#xff0c;非侵入式的&am…

电影选票选座系统|影院购票|电影院订票选座小程序|基于微信小程序的电影院购票系统设计与实现(源码+数据库+文档)

电影院订票选座小程序 目录 基于微信小程序的电影院购票系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、用户功能实现 2、管理员功能实现 &#xff08;1&#xff09;影院信息管理 &#xff08;2&#xff09;电影信息管理 &#xff08;3&#xff09;已完成…

ComfyUI 使用 LoRA 极简工作流

前言 ComfyUI的LoRA工作流相信大家都不陌生。开发者提供了大量基于默认节点功能搭建的工作流&#xff0c;其中就包括了如何使用LoRA。 仅仅使用一个LoRA也许还比较简单。只需要在基本工作流的基础上&#xff0c;再添加一个LoRA加载器的节点即可。如果要添加多个LoRA&#xff…

[C++ 核心编程]笔记 3 引用做函数参数

2.1 引用的基本使用 作用: 给变量起别名 语法: 数据类型 &别名 原名 2.2 引用注意事项 引用必须初始化引用在初始化后&#xff0c;不可以改变 #include<iostream> using namespace std;int main() {//引用基本语法int a 10;//创建引用int& b a;cout <&…

PHP智慧餐饮新风尚点餐系统

智慧餐饮新风尚点餐系统 —— 美食与科技的完美碰撞 &#x1f37d;️ 开篇&#xff1a;智慧餐饮的崛起 在快节奏的现代生活中&#xff0c;智慧餐饮正逐渐成为我们日常的一部分。随着科技的飞速发展&#xff0c;餐饮行业也在不断创新&#xff0c;力求为顾客提供更加便捷、高效…

中国象棋,Android小游戏开发

中国象棋&#xff0c;Android小游戏开发 A. 项目描述 本项目设计并开发了一款易于上手又富有挑战性的中国象棋应用。 用户界面与体验&#xff1a; 简洁与直观的设计&#xff0c;确保无论是新手还是老手&#xff0c;都能轻松使用。象棋主界面展示清晰的棋盘和操作选项&#x…

什么是DHCP Snooping?到底工作在第几层?

号主&#xff1a;老杨丨11年资深网络工程师&#xff0c;更多网工提升干货&#xff0c;请关注公众号&#xff1a;网络工程师俱乐部 中午好&#xff0c;我的网工朋友 对于企业和机构而言&#xff0c;保证内部网络的安全稳定运行不仅是日常运营的基础&#xff0c;更是防止敏感信息…

ChinaER:重塑跨境互联新体验

中国联通国际公司产品之 ChinaER&#xff1a;打造高效、安全的微软 Azure 云跨境互联服务 在全球化的数字时代&#xff0c;企业对于云计算的需求日益增长&#xff0c;尤其是跨境互联服务&#xff0c;成为企业拓展海外市场、实现全球业务协同的关键。中国联通国际公司&#xff…