Vue3实战:基于vue3-slide-verify打造高安全性离线滑块验证组件

【Vue】Vue3滑动拼图验证 vue3-slide-verify 安装 npm i vue3-slide-verify --save 引入 import SlideVerify from 'vue3-slide-verify'; import "vue3-slide-verify/dist/style.css"; 使用 <slide-verify @success="onVerifySuccess" ... 阅读详情

1. 为什么我们需要一个“离线”的滑块验证?

在开始动手写代码之前,我想先和你聊聊,为什么我们要费劲去折腾一个“离线”的滑块验证组件。你可能用过很多网站的滑块验证,比如登录、注册或者发帖的时候,让你把一块拼图拖到缺口里。这些验证码背后,往往需要连接验证码服务商的服务器,来确认你的操作是不是真人完成的。

这听起来很合理,对吧?但这里有几个痛点,是我在实际项目中踩过坑的。首先,网络依赖。如果你的应用在某些内网环境、或者用户网络状况不佳的时候,这个验证请求可能就卡住了,用户看着加载圈转啊转,体验非常糟糕。其次,隐私与合规。有些业务场景对数据安全要求极高,比如企业内部系统,你可能不希望用户的任何验证行为数据(哪怕是滑动轨迹)离开本地环境。最后,是成本和可控性。第三方服务通常有调用次数限制,用户量一大,成本就上来了。而且,万一服务不稳定或者接口变了,你的应用就得跟着改。

所以,“离线”验证的核心价值就出来了:不依赖外部网络,所有验证逻辑在前端完成,速度快、隐私好、完全可控。vue3-slide-verify 这个插件本身就支持传入本地图片,这为我们实现离线验证提供了完美的基石。我们接下来要做的,就是基于它,打造一个更健壮、更安全、更贴合业务的自定义组件。这不仅仅是把图片换成本地的,我们还要深入它的精度控制、非人为操作检测这些核心机制,让这个离线验证既好用,又难以被机器攻破。

2. 五分钟快速上手:创建你的第一个离线滑块验证

光说不练假把式,咱们直接开干。我会带你一步步创建一个最基础的离线验证组件,你能立刻看到效果。

首先,在你的 Vue 3 项目中安装这个插件:

npm install --save vue3-slide-verify

接下来,准备验证码的“皮肤”——也就是背景图片。官方示例可能会用网络图片,但我们要离线,所以得用自己的。我建议你准备 3 到 6 张风格统一的图片,尺寸大约在 300px * 150px 左右,放在项目的 src/assets/slideImgs/ 目录下。为什么是多张?因为每次刷新随机换一张,能增加机器识别的难度,也让界面不那么单调。图片内容最好有一些明显的纹理或图案,这样拼图缺口会更清晰。

现在,我们来创建组件文件。在 src/components/ 目录下,新建一个 SlideVerify.vue 文件。把下面的代码贴进去,记得把图片导入的路径改成你自己的。

<template>
  <div class="slide-verify-wrapper">
    <slide-verify
      ref="verifyBlock"
      :slider-text="sliderText"
      :accuracy="accuracy"
      :imgs="localImages"
      @again="onAgain"
      @success="onSuccess"
      @fail="onFail"
      @refresh="onRefresh"
    ></slide-verify>
    <div class="message" :style="{ color: messageColor }">{{ message }}</div>
  </div>
</template>

<script setup lang="ts">
import { ref } from 'vue';
import SlideVerify, { type SlideVerifyInstance } from 'vue3-slide-verify';
import 'vue3-slide-verify/dist/style.css';

// 1. 导入本地图片素材 - 这里是离线的关键!
import img1 from '@/assets/slideImgs/slide-1.jpg';
import img2 from '@/assets/slideImgs/slide-2.jpg';
import img3 from '@/assets/slideImgs/slide-3.jpg';
import img4 from '@/assets/slideImgs/slide-4.jpg';

// 2. 组件引用和状态定义
const verifyBlock = ref<SlideVerifyInstance>(); // 用于调用组件内部方法,比如刷新
const message = ref(''); // 显示给用户的提示信息
const messageColor = ref('#666'); // 信息颜色,成功绿色,失败红色

// 3. 配置项
const sliderText = ref('向右滑动完成验证'); // 滑块上的文字
const accuracy = ref(3); // 验证精度,越小越严格,后面会细讲
const localImages = ref([img1, img2, img3, img4]); // 使用的本地图片数组

// 4. 事件回调函数
const onAgain = () => {
  message.value = '检测到异常操作,请重试!';
  messageColor.value = '#e6a23c'; // 警告色
  // 自动刷新验证码
  setTimeout(() => {
    verifyBlock.value?.refresh();
    message.value = '';
  }, 1500);
};

const onSuccess = (detail: { timestamp: number; left: number }) => {
  const timeSpent = (detail.timestamp / 1000).toFixed(1);
  message.value = `验证成功!耗时 ${timeSpent} 秒`;
  messageColor.value = '#67c23a'; // 成功绿色
  // 这里可以触发父组件的成功逻辑,比如提交表单
  console.log('验证成功,移动距离:', detail.left, 'px');
};

const onFail = () => {
  message.value = '验证失败,请重新滑动';
  messageColor.value = '#f56c6c'; // 失败红色
  setTimeout(() => {
    message.value = ''; // 2秒后清空信息
  }, 2000);
};

const onRefresh = () => {
  message.value = ''; // 点击刷新按钮时清空信息
};
</script>

<style scoped>
.slide-verify-wrapper {
  width: 330px;
  padding: 20px;
  background-color: #fff;
  border-radius: 8px;
  box-shadow: 0 2px 12px rgba(0, 0, 0, 0.1);
}
.message {
  margin-top: 15px;
  font-size: 14px;
  text-align: center;
  min-height: 20px;
}
</style>

保存文件,然后在你的登录页面里引入并使用它:

<template>
  <div class="login-page">
    <!-- 你的表单代码... -->
    <button @click="showVerify = true">登录</button>

    <!-- 滑块验证弹窗 -->
    <div class="verify-modal" v-if="showVerify">
      <SlideVerify @success="handleVerifySuccess" @close="showVerify = false" />
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import SlideVerify from '@/components/SlideVerify.vue';

const showVerify = ref(false);

const handleVerifySuccess = () => {
  showVerify.value = false;
  console.log('验证通过,开始执行登录逻辑...');
  // 在这里调用你的登录API
};
</script>

<style>
.verify-modal {
  position: fixed;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.5);
  display: flex;
  justify-content: center;
  align-items: center;
  z-index: 1000;
}
</style>

好了,现在运行你的项目,点击登录按钮,应该就能看到一个完全离线、使用你本地图片的滑块验证弹窗了。滑动滑块到正确位置,看到成功的提示,这第一步就算完成了!这个过程完全没有请求任何外部网络,速度非常快。

3. 核心功能深度解析:精度控制与非人为操作检测

组件跑起来了,但作为开发者,我们得知道它到底是怎么工作的,特别是如何防止机器模拟操作。vue3-slide-verify 有两个非常关键的特性:accuracy(精度)和自动的“非人为操作检测”。理解它们,你才能用好这个组件。

3.1 accuracy 参数:不只是容错率

accuracy 这个属性,官方文档说它是“滑动验证的误差范围,默认值5”。听起来很简单,就是允许滑块离目标缺口有多远嘛。但它的作用远不止于此。

它的值范围是 1 到 10,或者 -1。 当你设置 accuracy=3 时,意味着滑块的中心点与缺口中心点的水平距离,只要在3个像素以内,都算验证成功。这个值越小,用户就需要滑得越精准,体验可能稍差,但安全性理论上更高(因为机器更难精确控制到1个像素)。我一般在实际项目中设置为3或4,在安全性和用户体验之间取得一个不错的平衡。

但更有趣的是它的第二个作用:当 accuracy 的值不是 -1 时,组件会自动开启一套“非人为操作检测”算法。 这是怎么实现的呢?我研究了一下它的源码(思路),它并不是简单看你滑得快还是慢。一个简单的脚本可以轻松模拟匀速滑动。它的检测逻辑更聪明一些:它会分析滑动过程中一系列坐标点的运动特征,比如速度的变化率(加速度)、移动轨迹的平滑度等。

想象一下真人滑动:手指在屏幕上移动,会有微小的、无意识的抖动,速度也是不均匀的——开始慢,中间快,快到终点时又会减速瞄准。而机器脚本生成的轨迹,往往是完美的直线或贝塞尔曲线,速度是恒定的或者有非常规律的变化。组件通过计算这些坐标数据的统计特征(比如方差),来判断当前滑动是否“太像机器了”。如果检测到异常,就会触发 @again 事件。

所以,accuracy 设置为 -1 就关闭了这项检测。除非你对自己的其他风控手段非常自信,否则我强烈建议你开启它(即不要设为-1)。这是提升安全性的第一道有效防线。

3.2 实战中的“非人为操作”应对策略

当 @again 事件被触发时,说明组件高度怀疑这次操作不是人为的。我们应该怎么做?原始文章里的处理是直接显示提示并刷新。这没问题,但我们可以做得更友好、更有效。

首先,不要立刻告诉用户“你是机器人”。这体验不好。可以像我们上面代码那样,显示“检测到异常操作,请重试!”这类中性提示。其次,自动刷新验证码。这是必须的,给用户(或者真的是机器)一个新的挑战。

但仅仅这样够吗?对于高安全场景,我们可以叠加策略:

  1. 记录失败次数:在组件的父级(比如登录页面),用一个变量记录连续触发 @again 的次数。如果短时间内(例如1分钟内)连续触发3次,可以暂时锁定这个IP或账号的验证功能几分钟,或者要求进行更复杂的验证(如短信验证码)。
  2. 更换验证模式:在多次 @again 后,可以动态切换验证方式。比如,我们可以在本地准备两套不同的滑块图片库(一套风景,一套抽象图案),在怀疑时切换到另一套,增加攻击者的适应成本。
  3. 结合用户行为分析:虽然我们做的是离线验证,但登录请求本身是要发往后端的。你可以在前端收集一些额外的、轻量的行为数据(如鼠标移动轨迹、点击位置等,需注意隐私),在触发 @again 时,将这些数据加密后随登录请求一并发送,供后端风控系统做二次研判。

把这些策略和组件本身的检测结合起来,就能构建一个多层次的、前端的轻量级防御体系。

4. 打造高安全性:自定义素材与高级防御技巧

使用本地图片只是离线化的第一步。要让这个验证组件更难被破解,我们得在“自定义”上下功夫,打破自动化脚本的预期。

4.1 精心设计你的图片素材库

图片不是随便找几张就行。一个容易被机器识别的图片库,会让你的滑块验证形同虚设。

  • 多样性是关键:准备至少10-20张高质量图片,并确保它们在颜色、亮度、纹理复杂度上差异很大。有的可以是高对比度的建筑线条,有的是色彩柔和的自然风景,有的是带有复杂纹理的织物。这样,针对某种类型图片训练的识别模型,在另一种类型上就可能失效。
  • 缺口位置随机化:vue3-slide-verify 本身会在图片上随机位置挖取滑块和缺口。但我们可以在提供图片时,就考虑让缺口的常见位置分布更均匀。虽然组件内部是随机的,但如果你的图片库中,所有图片的视觉重心都集中在右侧,那么缺口出现在左侧的概率就会变低,攻击者可能会利用这一点。
  • 动态图片加载:不要一次性把所有图片都 import 进来。我们可以写一个工具函数,在组件创建时,从一个更大的图片列表里随机挑选出本次要用的4-6张。这样,即使攻击者爬取了你前端打包后的资源,也无法获得完整的图片库。
// utils/slideImageLoader.ts
const allImagePaths = [
  () => import('@/assets/slideImgs/lib/img-1.jpg'),
  () => import('@/assets/slideImgs/lib/img-2.jpg'),
  // ... 更多图片
];

export async function getRandomImageSet(count: number): Promise<any[]> {
  const shuffled = [...allImagePaths].sort(() => Math.random() - 0.5);
  const selected = shuffled.slice(0, count);
  const modules = await Promise.all(selected.map(loader => loader()));
  // 注意:Vite/Webpack 动态导入的模块结构,需要取 default
  return modules.map(module => module.default);
}

然后在组件中动态设置 localImages:

import { getRandomImageSet } from '@/utils/slideImageLoader';
const localImages = ref<string[]>([]);

onMounted(async () => {
  localImages.value = await getRandomImageSet(4);
});

4.2 混淆与干扰:增加前端破解难度

前端代码是公开的,但我们可以增加一些混淆,让自动化的脚本编写变得更麻烦。

  • 动态滑块文字:不要总是“向右滑动”。可以准备一个数组,随机显示:“请完成拼图”、“滑动解锁”、“拖到缺口处”等。虽然简单,但能干扰一些简单的基于固定文字识别的脚本。
  • 随机化组件属性:每次组件加载时,可以随机微调一些不直接影响核心验证、但会影响DOM结构的属性。例如,给包裹的div一个随机的class名,或者微调外层容器的尺寸(在CSS变量控制下)。这会让基于固定选择器操作的脚本失效。
  • 伪造网络请求:这是一个进阶技巧。虽然我们是离线验证,但可以在滑动开始、进行中、结束时,随机生成一些看起来像是对外发送验证数据的函数调用(当然,并不真正发送)。这能干扰那些通过监听网络请求来判断验证逻辑的调试工具。

这些技巧的目的不是绝对安全(前端无绝对安全),而是极大地提高攻击者的成本和复杂度,让他们觉得破解你这个定制化的离线验证,不如去找一个更通用的、使用标准第三方验证码的网站来得划算。

5. 无缝集成:在登录注册流程中的最佳实践

验证组件本身做好了,怎么把它优雅地融入到真实的业务流里,特别是登录注册这种关键路径,非常影响用户体验。

5.1 封装成可复用的弹窗组件

我们之前写的 SlideVerify.vue 是一个基础组件。在实际项目中,我更喜欢把它再包装一层,变成一个带遮罩、有关闭按钮、有明确标题的弹窗组件 VerifyModal.vue。这样,在业务页面中调用起来更清晰。

<!-- components/VerifyModal.vue -->
<template>
  <div class="modal-mask" v-show="visible">
    <div class="modal-container">
      <div class="modal-header">
        <h3>安全验证</h3>
        <button class="close-btn" @click="handleClose">×</button>
      </div>
      <div class="modal-body">
        <SlideVerify
          ref="slideVerifyRef"
          @success="handleSuccess"
          @again="handleAgain"
          @fail="handleFail"
        />
      </div>
      <div class="modal-footer">
        <p class="tip-text">请拖动滑块,将图片拼合完整</p>
      </div>
    </div>
  </div>
</template>

<script setup>
import { ref } from 'vue';
import SlideVerify from './SlideVerify.vue';

const props = defineProps({
  visible: Boolean
});
const emit = defineEmits(['success', 'close']);

const slideVerifyRef = ref();

const handleSuccess = (detail) => {
  emit('success', detail); // 将成功事件和详情向上传递
};

const handleClose = () => {
  emit('close');
};

// 暴露一个重置方法给父组件,方便在需要时手动刷新
const reset = () => {
  slideVerifyRef.value?.reset(); // 假设我们在SlideVerify里暴露了reset方法
};

defineExpose({ reset });
</script>
<style scoped>
/* 这里添加你的弹窗样式 */
.modal-mask {
  position: fixed;
  /* ... 遮罩样式 */
}
.modal-container {
  background: white;
  border-radius: 12px;
  /* ... 容器样式 */
}
</style>

5.2 与表单验证联动

在登录页面,我们通常会在用户点击“登录”按钮后,才触发滑块验证。验证通过后,再发送登录请求。这个流程要顺畅。

<!-- views/Login.vue -->
<template>
  <form @submit.prevent="handleSubmit">
    <input v-model="form.username" placeholder="用户名"/>
    <input v-model="form.password" type="password" placeholder="密码"/>
    <button type="submit" :disabled="isSubmitting">登录</button>
  </form>

  <VerifyModal
    :visible="showVerifyModal"
    @success="onVerifySuccess"
    @close="showVerifyModal = false"
  />
</template>

<script setup>
import { ref, reactive } from 'vue';
import { loginApi } from '@/api/auth';
import VerifyModal from '@/components/VerifyModal.vue';

const form = reactive({ username: '', password: '' });
const isSubmitting = ref(false);
const showVerifyModal = ref(false);
// 添加一个标记,记录验证是否通过
const isVerified = ref(false);

const handleSubmit = async () => {
  // 1. 先进行简单的表单校验
  if (!form.username || !form.password) {
    alert('请填写完整信息');
    return;
  }

  // 2. 如果尚未验证,则弹出验证框
  if (!isVerified.value) {
    showVerifyModal.value = true;
    return; // 暂停表单提交,等待验证
  }

  // 3. 验证已通过,执行登录
  await performLogin();
};

const onVerifySuccess = (detail) => {
  console.log('验证成功,详情:', detail);
  isVerified.value = true; // 标记为已验证
  showVerifyModal.value = false; // 关闭弹窗
  // 验证成功后,自动触发登录逻辑
  performLogin();
};

const performLogin = async () => {
  isSubmitting.value = true;
  try {
    const res = await loginApi(form);
    // ... 处理登录成功
  } catch (error) {
    // 登录失败时,重置验证状态,因为可能是密码错误,需要重新验证
    isVerified.value = false;
    // 可以给用户一个提示
    alert(`登录失败:${error.message}`);
  } finally {
    isSubmitting.value = false;
  }
};
</script>

这个流程确保了:验证是登录的必要前置条件,且一次验证只对应一次登录尝试。如果登录失败(比如密码错误),需要用户重新触发验证,防止验证令牌被滥用。

5.3 性能与体验优化

  • 图片预加载:为了避免验证弹窗弹出时才加载图片导致的短暂白屏,可以在应用初始化或路由进入登录页时,提前预加载一部分验证图片到内存中。
  • 组件懒加载:由于验证组件可能不是首屏必需,可以使用 Vue 的 defineAsyncComponent 进行懒加载,减少初始包体积。
  • 失败友好提示:在 @fail 事件中,除了显示红色文字,可以添加一个轻微的抖动动画,让用户更明确地感知到失败。
  • 成功自动跳转:验证成功后,如果后续操作(如登录API调用)很快,可以不用给用户“验证成功”的提示,直接无缝进入下一步。如果后续操作较慢,则需要一个“正在处理…”的加载状态,避免用户困惑。

把这些细节都考虑到,这个离线滑块验证组件就能从一个单纯的功能模块,进化成提升你应用整体安全性和用户体验的利器。它运行高效,不依赖网络,保护用户隐私,并且通过深度定制,能有效抵御常见的自动化攻击。

前端Vue3 使用vue3-slide-verify 实现 滑块\滑动\拼图认证模块 (离线) 前端Vue3 使用vue3-slide-verify 实现 滑块验证\滑动拼图验证 验证实现登陆。 项目基于vue3-slide-verify 开发 ,改为离线模式,增加了回调函数,优化了界面。 阅读详情

相关推荐

Vue3登录页必看:vue3-slide-verify滑块验证完整实现(含遮罩层)

本文详细介绍了在Vue3项目中实现滑块验证(vue3-slide-verify)的完整方案,包括基础配置、遮罩层设计和登录页集成。通过实战代码演示,帮助开发者快速构建安全可靠的登录验证系统,提升用户体验和防护能力。

ik678901234的博客 827

vue3中使用 vue3-slide-verify 滑块验证登录

vue3中使用 vue3-slide-verify 滑块验证登录

m0_55969466的博客 1万+

Vue - 详细介绍 vue-monoplasty-slide-verify & vue3-puzzle-vcode 滑动验证组件

本篇详细介绍了vue-monoplasty-slide-verify和vue3-puzzle-vcode两种滑动验证组件在Vue2和Vue3中的实际运用,对于实际项目中可以通过搭配其他UI组件库如Element - UI 的弹窗效果更佳。

miaomiaowins的博客 3639

Vue3滑块验证实战:手把手教你用vue3-slide-verify实现离线拼图认证(附完整代码)

本文详细介绍了如何在Vue3项目中使用vue3-slide-verify组件实现离线拼图认证系统。从环境配置、图片资源准备到核心组件开发,逐步讲解滑块验证的实现过程,包括高级功能如验证精度调节、防机器人机制和无障碍访问优化。文章还提供了实际应用集成方案和性能优化技巧,帮助开发者构建高安全性的滑块验证系统。

pink的博客 720

vue-monoplasty-slide-verify:Vue幻灯片验证在线预览

vue-monoplasty-slide-verify 一个Vue插件以滑动验证 构建设置 # install dependencies npm install # serve with hot reload at localhost:8080 npm run dev # build for production with minification npm run build 快速开始 1.将vue-monoplasty-slide-verify导入您的vue.js项目。 使用构建工具: npm install --save vue-monoplasty-slide-verify import Vue from &#39;vue&#39; ; import SlideVerify from &#39;vue-monoplasty-slide-verify&#39; ; Vue . use ( SlideVerif

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”资源包,重点在于基于Simulink平台对两路半桥LLC谐振变换器进行高精度建模与动态仿真,特别考虑了谐振参数不一致及分裂电容等非理想工况对系统性能的影响。该仿真模型不仅涵盖了主电路拓扑、软开关实现机制与谐振网络设计,还深入分析了不同参数配置下系统的启动特性、稳态效率、动态响应及软开关条件的满足情况。通过参数扫描与对比仿真,帮助用户掌握LLC变换器的关键设计要素与优化方法,具备较强的工程指导价值和科研教学意义。; 适合人群:电力电子、电气工程及其自动化等相关专业的高校师生,以及从事高频开关电源、新能源变换器、车载充电机等领域的研发工程师和技术人员。; 使用场景及目标:① 掌握两路并联半桥LLC谐振变换器的建模与仿真方法;② 理解软开关技术在提升变换器效率与降低EMI方面的关键作用;③ 分析谐振参数偏差与分裂电容结构对系统均流特性、增益曲线及软开关范围的影响;④ 支持科研项目中的拓扑验证、控制策略开发与故障工况分析; 阅读建议:建议结合Simulink仿真模型与配套说明文档进行学习,重点关注谐振腔参数设置、驱动时序设计及软开关波形观测;可通过调整谐振电感、电容值或引入参数失配,观察系统行为变化,深入理解LLC变换器的稳定边界与优化设计原则。

vue3 滑动验证组件

vue3拖动滑块进行验证 组件效果展示 源码 <template> <div class="slider-verification" ref="sliderContainer"> <div class="slider-left-bg" :style="sliderLeftWidthStyle"></div> <div class="prompt-text" :style="verifySuccess ? promptTextStyleSuc

BDawn的专栏 7299

使用.NET 免费开源包ViewFaceCore做一个人脸识别并注册的功能,没有比我更全的

本文介绍了一个基于WinForm的免费人脸识别系统实现方案。系统使用AForge和ViewFaceCore库,支持从USB或电脑自带摄像头采集图像,具备人脸注册和快速识别功能。硬件方面仅需普通摄像头,软件依赖多个NuGet包(如AForge.Video、ViewFaceCore等)。界面包含视频显示、图像预览和功能按钮控件,后台采用SQLServer存储用户面部特征数据。核心代码展示了人脸检测、特征提取和多线程处理逻辑,通过ViewFaceCore实现高效识别。系统具有识别速度快、准确率高的特点,适合Win

一个靠“吃代码”长大的程序猿,专治各种“Bug 饥饿症”。 817

vue3滑块验证使用vue3-slide-verify,宽度自适应

vue3使用vue3-slide-verify实现图片滑块验证是否机器人操作,实现验证模块宽度自适应

weixin_46687032的博客 6279

桁架 拓扑优化 matlab程序_拓扑优化在结构轻量化及板壳加筋肋最优布置的应用...

1 拓扑优化简介材料的有效利用一直都是人类追求的目标,也是许多研究领域不变的话题,并伴随着结构优化理论和方法的产生而发展。结构优化设计通常分为三个层次:(1)拓扑优化:在一个确定的连续区域内寻求结构内部非实体区域位置和数量的最佳配置,寻求结构中的构件布局及节点联结方式最优化,使结构能在满足应力、位移等约束条件下,将外载荷传递到结构支撑位置,同时使结构的某种性态指标达到最优;(2)形状优化:指在保持...

weixin_39525355的博客 1878

Spyglass功耗分析:从RTL到优化的全流程实践

本文详细介绍了在RTL设计阶段使用Spyglass进行早期功耗分析的全流程实践。通过一个真实项目案例,阐述了早期功耗分析的必要性,并手把手指导了从文件准备、GUI操作到报告解读与优化的完整步骤。文章重点说明了如何利用Spyglass实现功耗分析的“左移”,在编码阶段识别和修复功耗热点,从而避免后期高昂的修改成本,是低功耗芯片设计的关键技能。

purple的博客 1117

vue3使用vue3-slide-verify做滑块验证

先安装vue3-slide-verify:npm i vue3-slide-verify --save。

GX15822856926的博客 1355

基于dify平台批量分析excel格式信息

如何以表格形式批量输入一些信息,然后让大模型以对话应用形式逐条进行推理分析?请逐行分析以下数据,给出推理结果:{{input}}这里提供一个分步解决方案,结合。

knightissocool的博客 8013

vue3-slider-verify滑块验证插件简单封装

为了实现人机验证,需要使用第三方的插件实现验证操作。vue3-slider-verify 是一个适用于 Vue 3 的滑块验证插件,通过简单的配置和事件监听,可以实现滑动验证码功能,增强用户交互的安全性和趣味性。

weixin_38479876的博客 1339

【GlobalMapper精品教程】070:专题地图制作完整操作教程

与其它GIS软件一样,Globalmapper也可以制作出漂亮的地图,本文讲解专题地图制作完整操作流程。

智慧空间实验室 3755

使用 MATLAB/Simulink + Simscape Electrical + Simulink Design Optimization,构建一个沙漠环境中光伏组件灰尘积累与效率下降仿真模型

本文通过,构建了沙漠环境中光伏组件灰尘积累与效率下降仿真模型✅ 建立了风速-沙尘-积尘速率的物理关系✅ 仿真了灰尘积累过程及其对Isc 和 Pmax的影响✅ 量化分析了不同清洁策略的经济性✅ 提出了优化设计与智能运维建议。

xiaoheshang_123的博客 123

【亲测免费】 推荐开源项目:Vue3-Slide-Verify - 轻松实现滑动验证的Vue组件

推荐开源项目:Vue3-Slide-Verify - 轻松实现滑动验证的Vue组件 项目简介 是一个基于Vue3的轻量级滑块验证组件,旨在为你的应用添加安全、易于使用的滑动验证功能,类似于许多网站上常见的那种滑动解锁或验证机制。这个项目由Monoplasty 开发并维护,遵循MIT许可证,完全免费且开源。 技术分析 核心特性 Vue3 兼容:Vue3-Slide-Verify充分利用了Vue3的...

gitblog_00027的博客 2506

基于simulink的多能源系统协同与能源互联网的电网系统场景实例:虚拟电厂(VPP)中电网与储能集群的协同控制

本文详细介绍了使用Simulink构建虚拟电厂(VPP)与储能集群协同控制系统的完整建模过程。主要内容包括:1) VPP系统架构设计;2)分步骤建模过程,涵盖虚拟电厂系统创建、储能单元与集群建模、VPP控制器设计(核心)以及协同控制场景仿真;3)性能分析与典型应用场景。通过混合整数线性规划优化调度和智能指令分解策略,实现了VPP参与电力市场交易、电网调频调峰等功能,验证了系统在提升可再生能源消纳率(96%)、降低电网峰谷差(35%)等方面的优异性能。该建模方法为能源互联网中的分布式资源聚合与协同控制提供了实

xiaoheshang_123的博客 474

Vue3引入滑块验证组件-2分钟搞定

Vue3引入滑块验证组件-2分钟搞定

乐于分享,共同成长 1302

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

【Vue3】滑动验证组件 | 滑动验证

前言 前端验证方式(bwrs) 人为滑动轨迹参考 当我们用手滑动验证滑块时,滑动轨迹为变速曲线运动,上下起伏分布不均、且变速运动。如下图3图 图1 图2 图3 人为/人机/脚本滑动判断 滑动滑块所用时间低于50毫秒判断为人机/脚本,200px的滑块,人为滑动没那么快。 判断滑动的线条起伏,若是纯直线,则为人机,因为人为滑动没那么直。 计算滑动速度,人为滑动肯定是变速滑动,若是匀速滑动则为人机。 若不是人为滑动,多数是直线匀速滑动,不会上下起伏。例如脚本滑动。 但部分机器/脚本可以模拟人

此人太懒,没有任何简介 8247

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

vue3中登录滑动验证插件使用

vue3【代码】登录滑动验证插件使用。

DT_11的博客 2341

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

滑动验证插件 SlideVerify 的使用

最后发现 this.$refs.slideblock.reset();这样就可以刷新slide-verify,这里记录一下我写的过程和踩坑过程。一定要注意注册成功或者注册失败的时候重新刷新slide-verify,不然注册失败的时候图片是上上次验证成功的样子,需要自己刷新一下。这里我把注册的接口的调用写在了图片验证成功里面,就是onsuccess()函数里,就可以让图片验证成功再进行调用注册的接口。

m0_61689817的博客 3016
上一篇: vue-office:一站式Vue文件预览解决方案,轻松集成docx、xlsx与pdf
下一篇: 408考研必看:文件系统空闲块管理的四种方法实战对比(附代码演示)
生活碎片
博客等级 码龄2年 51粉丝 1780原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值