返回顶部
首页 > 资讯 > 前端开发 > JavaScript >vue封装图片滑块验证组件的方法
  • 206
分享到

vue封装图片滑块验证组件的方法

2024-04-02 19:04:59 206人浏览 安东尼
摘要

本文实例为大家分享了Vue封装图片滑块验证组件的具体代码,供大家参考,具体内容如下 滑块验证组件整体不难,主要在于设置图片的样式问题,想要让背景图充满div,就需要滑块图片也跟随等比

本文实例为大家分享了Vue封装图片滑块验证组件的具体代码,供大家参考,具体内容如下

滑块验证组件整体不难,主要在于设置图片的样式问题,想要让背景图充满div,就需要滑块图片也跟随等比放大,效果与代码如下:

html

<template>
  <section class="slider-section">
    <div class="img-box">
      <img :src="'data:image/png;base64,' + sliderData.bigImg" class="bg-img" ref="bgImg" />
      <img :src="'data:image/png;base64,' + sliderData.smallImg" class="slider-img" ref="sliderImg" />
    </div>
    <div class="slider-box">
      <span class="slider-text">向右滑动滑块填充拼图</span>
      <div class="slider-icon" @mousedown="rangeMove">></div>
    </div>
  </section>
</template>

js

<script>
export default {
  props: ['sliderData'], // 父组件传入的滑块数据对象
  watch: {
    sliderData: { // 监听滑块数据变化,重置滑块位置
      handler (newVal, oldVal) {
        if (newVal) {
          this.init()
        }
      },
      deep: true
    }
  },
  data () {
    return {
      disX: 0 // 滑块距离背景图左侧的位置
    }
  },
  mounted () {
    this.init()
  },
  methods: {
    // 初始化滑块的位置
    init () {
      this.disX = 0 // 初始化滑块位置
      let bigImg = new Image() // 创建背景图片
      bigImg.src = "data:image/png;base64," + this.sliderData.bigImg
      bigImg.onload = () => {
        let originWidth = bigImg.width  // 获取原始背景图片的宽度
        let widthRate = this.$refs.bgImg.width / originWidth // 背景图片渲染后的实际宽度/原始图片宽度
        let smallImg = new Image() // 创建滑块图片
        smallImg.src = "data:image/png;base64," + this.sliderData.smallImg
        this.$refs.sliderImg.src = 'data:image/png;base64,' + this.sliderData.smallImg // 设置滑块图片地址
        this.$refs.sliderImg.style.width = smallImg.width * widthRate + 'px'  // 设置滑块图片宽度
        this.$refs.sliderImg.style.top = this.sliderData.smallY * this.$refs.bgImg.height + 'px'  // 设置滑块距离背景图顶部的距离
        this.$refs.sliderImg.style.left = 0  // 设置滑块距离背景图左侧的距离
      }
    },
    // 移动事件触发
    rangeMove (e) {
      let ele = e.target
      let startX = e.clientX
      let eleWidth = ele.offsetWidth
      let parentWidth = ele.parentElement.offsetWidth
      let MaxX = parentWidth - eleWidth
      document.onmousemove = (e) => {
        let endX = e.clientX
        this.disX = endX - startX
        this.$refs.sliderImg.style.left = this.disX + 'px'
        if (this.disX <= 0) {
          this.disX = 0
          this.$refs.sliderImg.style.left = 0
        }
        if (this.disX >= MaxX - eleWidth) {//减去滑块的宽度,体验效果更好
          this.disX = MaxX
          this.$refs.sliderImg.style.left = (parentWidth - this.$refs.sliderImg.width) + 'px'
        }
        ele.style.transition = '.1s all'
        ele.style.transfORM = 'translateX(' + this.disX + 'px)'
        e.preventDefault()
      }
      document.onmouseup = () => {
        this.$emit('submitPic', this.disX / parentWidth) // 停止滑动事件冒泡给父级
        setTimeout(() => {
          ele.style.transition = '.5s all'; // 初始化滑块位置
          ele.style.transform = 'translateX(0)';
        }, 200)
        document.onmousemove = null
        document.onmouseup = null
      }
    }
  }
}
</script>

CSS

<style scoped lang="less">
.slider-section {
  margin: 20px 0;
  .img-box {
    position: relative;
    .bg-img {
      width: 100%;
    }
    .slider-img {
      position: absolute;
      left: 0;
      top: 0;
    }
  }
 
  .slider-box {
    margin-top: 20px;
    background: #f7f9fa;
    color: #666;
    border: 1px solid #e4e7eb;
    position: relative;
    height: 30px;
    width: 100%;
    &:hover {
      box-shadow: 0 0 3px #ccc;
    }
    .slider-text {
      font-size: 14px;
      position: absolute;
      top: 50%;
      left: 50%;
      transform: translate(-50%, -50%);
    }
    .slider-icon {
      width: 30px;
      height: 30px;
      background: #c8923a;
      text-align: center;
      font-size: 20px;
      color: #fff;
      box-shadow: 0 0 6px #ccc;
    }
  }
}
</style>

注:使用的是mousedown、onmousemove 、onmouseup 事件,仅支持PC端,如果要在移动端使用,需要把这些事件改成touch等;

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: vue封装图片滑块验证组件的方法

本文链接: https://lsjlt.com/news/144606.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • vue封装图片滑块验证组件的方法
    本文实例为大家分享了vue封装图片滑块验证组件的具体代码,供大家参考,具体内容如下 滑块验证组件整体不难,主要在于设置图片的样式问题,想要让背景图充满div,就需要滑块图片也跟随等比...
    99+
    2024-04-02
  • vue如何封装图片滑块验证组件
    这篇文章主要为大家展示了“vue如何封装图片滑块验证组件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue如何封装图片滑块验证组件”这篇文章吧。具体内容如下滑块验证组件整体不难,主要在于设置图...
    99+
    2023-06-29
  • vue自定义开发滑动图片验证组件
    纯前端,通过canvas来自定义开发滑动图片验证,反过来也能完成纯滑动验证。 <template>   <div class="verification" ref=...
    99+
    2024-04-02
  • vue怎么自定义开发滑动图片验证组件
    这篇文章主要介绍了vue怎么自定义开发滑动图片验证组件的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇vue怎么自定义开发滑动图片验证组件文章都会有所收获,下面我们一起来看看吧。纯前端,通过canvas来自定义开...
    99+
    2023-06-29
  • vue封装组件之上传图片组件
    本文实例为大家分享了vue上传图片组件的封装具体代码,供大家参考,具体内容如下 未上传状态 上传状态 其他状态(查看/删除) 自定义组件文件名称 - 这里叫UploadImg....
    99+
    2024-04-02
  • vue左右滑动选择日期组件封装的方法
    现在做的项目中遇到了左右滑动选择日期的一个功能,然后我封装了一下这个组件,现在分享给大家看一下: 效果图: 1、安装dayjs日期文件 npm install dayjs --sa...
    99+
    2024-04-02
  • Python实现图片滑动式验证识别方法
    1 abstract 验证码作为一种自然人的机器人的判别工具,被广泛的用于各种防止程序做自动化的场景中。传统的字符型验证安全性已经名存实亡的情况下,各种新型的验证码如雨后春笋般涌现。目前最常见的一种形式就是...
    99+
    2022-06-04
    方法 图片 滑动式
  • vue日历组件的封装方法
    本文实例为大家分享了vue日历组件的封装代码,供大家参考,具体内容如下 图示 封装的组件的代码如下 <template>   <div class="calend...
    99+
    2024-04-02
  • Vue分页组件的封装方法
    前言 这个是基于vue2的分页封装,仿照elementUI而写的组件。 效果如图 话不多说,直接上代码 <template>   <div class="pagi...
    99+
    2024-04-02
  • python 识别图片验证码/滑块验证码准确率极高的 ddddocr 库
    前言 验证码的种类有很多,它是常用的一种反爬手段,包括:图片验证码,滑块验证码,等一些常见的验证码场景。 识别验证码的python 库有很多,用起来也并不简单,这里推荐一个简单实用的识别验证码的库 d...
    99+
    2023-09-05
    python 开发语言 numpy
  • Vue图片放大镜组件的封装使用详解
    基于Vue的图片放大镜组件封装,供大家参考,具体内容如下 图片放大镜的实现过程是将一个小图放置在一个盒子里,当鼠标在小图盒子里移动时,出现一个移动块(阴影区域/遮罩层),右侧大图片盒...
    99+
    2024-04-02
  • vue面包屑组件的封装方法
    vue中自己封装面包屑组件,供大家参考,具体内容如下 要实现效果 前言 很多电商类产品都需要实现面包屑导航,用来优化用户体验 一、初级面包屑封装组件 1.封装基础结构组件 Brea...
    99+
    2024-04-02
  • Vue中图片上传组件封装-antd的a-upload二次封装的实例
    目录图片上传组件封装-antd的a-upload二次封装api组件封装使用优化图片上传组件封装-antd的a-upload二次封装 a-upload组件 api const pub...
    99+
    2024-04-02
  • vue3封装轮播图组件的方法
    目的 封装轮播图组件,直接使用,具体内容如下 大致步骤 准备my-carousel组件基础布局,全局注册 准备home-banner组件,使用my-carousel...
    99+
    2024-04-02
  • Vue3+Vue-cli4项目中使用腾讯滑块验证码的方法
    简介: 滑块验证码相比于传统的图片验证码具有以下优点: 验证码的具体验证不需要服务端去验证,服务端只需要核验验证结果即可。 验证码的实现不需要我们去了解,也不需要我...
    99+
    2024-04-02
  • Vue使用Swiper封装轮播图组件的方法详解
    目录Swiper为什么要封装组件开始封装1.下载安装Swiper2.引入css样式文件3.引入js文件4.把官网使用方法中的HTML结构复制粘贴过来5.初始化Swiper自定义效果完...
    99+
    2024-04-02
  • vue-cropper插件实现图片截取上传组件封装
    基于vue-cropper插件实现图片截取上传组件封装的具体代码,供大家参考,具体内容如下 需求场景: 后台开发需要上传图片并进行相应比例尺寸图片的截取,本组件开发采用Ant Des...
    99+
    2024-04-02
  • Vue滑块解锁组件使用方法详解
    本文实例为大家分享了Vue滑块解锁组件的使用,供大家参考,具体内容如下 依据 JS拖动滑块验证 开发的 Vue 滑块解锁组件。 <template>   <div ...
    99+
    2024-04-02
  • vue-upload-component如何封装一个图片上传组件
    这篇文章主要介绍了vue-upload-component如何封装一个图片上传组件,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。需求分析业务...
    99+
    2024-04-02
  • 怎么用Vue组件封装上传图片和视频
    这篇文章主要介绍“怎么用Vue组件封装上传图片和视频”,在日常操作中,相信很多人在怎么用Vue组件封装上传图片和视频问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Vue组件封装上传图片和视频”的疑惑有所...
    99+
    2023-06-20
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作