原生JS实现滑动按钮效果

yizhihongxing

实现滑动按钮效果,可以使用原生JavaScript实现。下面是完整的攻略:

第一步:HTML结构搭建

首先,需要在HTML文件中创建一个div容器元素,用于包裹整个滑动按钮。基本结构如下:

<div class="slider-container">
  <div class="slider-button"></div>
</div>

其中,slider-container为外层div容器,slider-button为内层滑动按钮。需要注意给两个元素设置样式,让其变成一个可拖动的按钮。

第二步:CSS样式设置

为了使滑动按钮具有好看的外观和可移动性,需要对其进行样式设置。主要包括以下几个方面:

  1. 设置外部容器的宽度和高度,和内层滑动按钮需要占据的宽度和高度。

  2. 给外部容器和内层滑动按钮设置 position: relative;,以便后面使用相对定位进行位置修改。

  3. 为内层滑动按钮设置圆角样式 border-radius: 50%;,让其变为圆形。

  4. 为内层滑动按钮添加背景图案,并设置可拖动时的手型光标。

下面是基本的CSS代码:

.slider-container {
  width: 200px;
  height: 50px;
  background-color: #ccc;
  border-radius: 25px;
  position: relative;
}

.slider-button {
  width: 50px;
  height: 50px;
  background-color: #fff;
  background-image: url('slider-icon.png');
  background-size: 30px 30px;
  background-position: center;
  background-repeat: no-repeat;
  cursor: pointer;
  position: absolute;
  border-radius: 50%;
  top: 0;
  left: 0;
  transition: all 0.2s ease;
}

第三步:实现滑动操作

接下来,就是滑动按钮的主要操作:拖动事件监听和相应的位置计算。

  1. 监听鼠标按下事件mousedown,在事件监听函数中获取鼠标按下时的位置startX和内层滑动按钮的初始位置startLeft
const sliderButton = document.querySelector('.slider-button'); // 获取内层滑动按钮元素
let startX = 0; // 记录鼠标按下时的起点位置
let startLeft = 0; // 记录内层滑动按钮的初始位置
sliderButton.addEventListener('mousedown', function (event) {
  startX = event.clientX; // 记录鼠标按下时的起点位置
  startLeft = parseInt(window.getComputedStyle(sliderButton).left); // 获取内层滑动按钮的初始位置
});
  1. 监听鼠标移动事件mousemove,在事件监听函数中计算内层滑动按钮应该移动到的位置,并更新其left属性的值。
document.addEventListener('mousemove', function (event) {
  const diffX = event.clientX - startX; // 计算鼠标移动的距离
  const newLeft = startLeft + diffX; // 计算内层滑动按钮应该移动到的位置

  if (newLeft >= 0 && newLeft <= (200 - 50)) { // 判断移动是否超出范围
    sliderButton.style.left = newLeft + 'px'; // 更新内层滑动按钮的位置
  }
});
  1. 监听鼠标抬起事件mouseup,在事件监听函数中判断滑动按钮是否处于选中状态,并执行相应的操作。
document.addEventListener('mouseup', function (event) {
  const diffX = event.clientX - startX; // 计算鼠标移动的距离
  const newLeft = startLeft + diffX; // 计算内层滑动按钮应该移动到的位置

  if (newLeft >= (200 - 50)) {
    sliderButton.style.left = (200 - 50) + 'px'; // 将内层滑动按钮移动到最右边
    alert('滑动成功!'); // 弹出成功提示框
  } else {
    sliderButton.style.left = '0px'; // 将内层滑动按钮移动回原位置
  }
});

示例说明

示例一:纯JS实现滑动验证码

此示例演示如何使用纯JS实现一个滑动验证码。基本功能已经包括拖动、验证成功/失败提示等。

可参考以下代码(HTML和CSS略):

const slider = document.querySelector('.slider');
const sliderButton = document.querySelector('.slider-button');
let startX = 0;
let startLeft = 0;
let isSliding = false; // 记录是否处于滑动状态
let isSuccess = false; // 记录是否验证成功

sliderButton.addEventListener('mousedown', function (event) {
  startX = event.clientX;
  startLeft = parseInt(window.getComputedStyle(sliderButton).left);
  isSliding = true; // 进入滑动状态
});

document.addEventListener('mousemove', function (event) {
  if (isSliding) {
    const diffX = event.clientX - startX;
    const newLeft = startLeft + diffX;
    if (newLeft >= 0 && newLeft <= (200 - 50)) {
      sliderButton.style.left = newLeft + 'px';
    }
  }
});

document.addEventListener('mouseup', function (event) {
  if (isSliding) {
    const diffX = event.clientX - startX;
    const newLeft = startLeft + diffX;
    isSliding = false; // 退出滑动状态
    if (newLeft >= (200 - 50)) {
      sliderButton.style.left = (200 - 50) + 'px';
      isSuccess = true;
      alert('验证成功!');
      resetSlidingButton(); // 重置滑动按钮
    } else {
      sliderButton.style.left = '0px';
      alert('验证失败,请重新滑动!');
    }
  }
});

function resetSlidingButton() {
  sliderButton.style.left = '0px';
  isSuccess = false;
  // 重设验证码
}

示例二:原生JS移动端滑动验证

此示例演示如何在移动端使用原生JS实现一个滑动验证。

可参考以下代码(HTML和CSS略):

const slider = document.querySelector('.slider');
const sliderButton = document.querySelector('.slider-button');
let startX = 0;
let startLeft = 0;
let isSliding = false;
let isSuccess = false;

sliderButton.addEventListener('touchstart', function (event) {
  startX = event.touches[0].clientX; // 获取第一根手指按下时的起点位置
  startLeft = parseInt(window.getComputedStyle(sliderButton).left);
  isSliding = true;
});

document.addEventListener('touchmove', function (event) {
  if (isSliding) {
    const diffX = event.touches[0].clientX - startX; // 获取第一根手指向后移动时的位置
    const newLeft = startLeft + diffX;
    if (newLeft >= 0 && newLeft <= (200 - 50)) {
      sliderButton.style.left = newLeft + 'px';
    }
  }
});

document.addEventListener('touchend', function (event) {
  if (isSliding) {
    const diffX = event.changedTouches[0].clientX - startX; // 获取第一根手指最后离开时的位置
    const newLeft = startLeft + diffX;
    isSliding = false;
    if (newLeft >= (200 - 50)) {
      sliderButton.style.left = (200 - 50) + 'px';
      isSuccess = true;
      alert('验证成功!');
      resetSlidingButton();
    } else {
      sliderButton.style.left = '0px';
      alert('验证失败,请重新滑动!');
    }
  }
});

function resetSlidingButton() {
  sliderButton.style.left = '0px';
  isSuccess = false;
  // 重设验证码
}

以上两个示例都是基于原生JS实现,可以自行调整样式和功能,实现更加美观和可定制的滑动验证按钮。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:原生JS实现滑动按钮效果 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • 使用C#来编写一个异步的Socket服务器

    首先,创建一个异步Socket服务器需要进行以下步骤: 创建Socket监听端口 等待连接 接收连接并分配线程进行处理 给客户端发送信息 关闭连接 下面我们来一步步讲解具体实现。 创建Socket监听端口 创建Socket监听端口相关的代码如下所示: using System.Net; using System.Net.Sockets; public voi…

    Azure 2023年5月25日
    00
  • golang实践-第三方包为私有库的配置方案

    下面是详细讲解“golang实践-第三方包为私有库的配置方案”的完整攻略。 现有情况 我们的应用程序使用了一些第三方Go库,这些库通常通过go get命令下载,但是我们有一些私有库不应该公开,这些库必须保留在私有代码仓库中,并且只有应用程序可以访问这些私有库。 解决方案 第一步:使用私有代码仓库 我们需要把私有库存储在私有代码仓库中,例如Gitlab、Git…

    Azure 2023年5月26日
    00
  • 202101最新win10教育版/专业版激活秘钥分享 附激活工具

    202101最新win10教育版/专业版激活秘钥分享 附激活工具完整攻略 简介 本文将详细讲解如何使用秘钥和激活工具激活win10教育版/专业版,包括秘钥获取、激活工具下载、激活步骤等内容。 预备知识 在开始操作前,请确保你已经下载并安装了win10教育版/专业版系统,并且能够正常启动。 秘钥获取 打开浏览器,访问https://msdn.itellyou.…

    Azure 2023年5月25日
    00
  • win10 21H1专业版/企业版/教育版激活秘钥推荐 附激活工具

    关于win10 21H1专业版/企业版/教育版激活秘钥推荐以及激活工具的攻略,我整理了一份详细的说明,具体内容如下。 1. win10 21H1专业版/企业版/教育版激活秘钥推荐 在进行win10系统的激活之前,我们需要获取一个有效的激活秘钥。下面是几种win10 21H1专业版/企业版/教育版激活秘钥的推荐: win10 21H1专业版激活秘钥:VK7JG…

    Azure 2023年5月25日
    00
  • 写作C# 读作C 井 这些程序员开发常用词汇你读对了吗?

    要想正确读写编程语言中的专有名词,需要掌握其正确的发音和拼写。下面是“写作C# 读作C 井 这些程序员开发常用词汇你读对了吗?”的完整攻略: 一、C#的发音和拼写 C#是微软开发的一种面向对象的编程语言,是在C++基础上发展而来的。正确发音应该是 “C sharp”,表示音高升高的音符。而拼写则是C加上一个#符号,如“C#”。 二、C语言中的“井号” 在编程…

    Azure 2023年5月25日
    00
  • PostgreSQL备份工具 pgBackRest使用详解

    PostgreSQL备份工具 pgBackRest使用详解 pgBackRest是一个可靠、高效、功能丰富的 PostgreSQL 备份和恢复工具,本文将详细介绍如何使用此工具。 安装 pgBackRest 可在 Linux 和 macOS 上运行,并且可通过应用程序包管理器进行安装,也可以直接从源代码进行安装。 应用程序包管理器安装 如果您使用的是 Red…

    Azure 2023年5月25日
    00
  • Win11 Build22000.346 Beta/Release预览版发布 KB5007262更新汇总

    Win11 Build22000.346 Beta/Release预览版发布 KB5007262更新汇总攻略 前言 Win11 Build22000.346 Beta/Release预览版发布了KB5007262的更新,此次更新主要包括安全性和质量改进。本篇攻略将详细讲解Win11 Build22000.346 Beta/Release预览版发布及KB500…

    Azure 2023年5月25日
    00
  • Win10 Build 19045.3030 Release 预览版更新补丁KB5026435发布(附更新内容)

    Win10 Build 19045.3030 Release 预览版更新补丁KB5026435 发布攻略 Win10 Build 19045.3030 Release 预览版更新补丁KB5026435已发布,此次更新主要修复了一些漏洞和问题,并且引入了一些新功能和改进。接下来我们来详细解读此次更新的内容、安装方式及注意事项。 更新内容 此次更新包含了以下新功…

    Azure 2023年5月25日
    00
合作推广
合作推广
分享本页
返回顶部