原生JS实现滑动按钮效果

实现滑动按钮效果,可以使用原生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日

相关文章

  • 详解可跨域的单点登录(SSO)实现方案【附.net代码】

    下面是对“详解可跨域的单点登录(SSO)实现方案【附.net代码】”的完整攻略。 简介 单点登录(SSO)是指在多个应用系统中,用户只需要登录一次,即可访问所有相互信任的应用系统,而且不需要再次输入密码或者进行认证。这种方式不仅可以提高用户体验,降低用户登录认证的次数,也可以降低应用系统的开发成本。 本文将介绍一种可跨域的单点登录(SSO)实现方案,使用.N…

    Azure 2023年5月25日
    00
  • Ansible Galaxy命令的使用实践示例详解

    Ansible Galaxy命令的使用实践示例详解 什么是Ansible Galaxy Ansible Galaxy是一个Ansible的第三方插件库,其中包含了各种角色、playbooks、插件等等,可以方便我们快速的开发Ansible的任务。 Ansible Galaxy的主要命令 ansible-galaxy init: 初始化一个Ansible的角色…

    Azure 2023年5月25日
    00
  • Win2003今年7月停止支持 微软发文鼓励用户尽快迁移

    当Win2003停止支持后,由于不再有安全更新,系统安全会受到威胁。为了保障系统安全和稳定,我们需要及时迁移操作系统。下面是完整的操作攻略: 1. 准备工作 在开始迁移之前,您需要进行以下的准备工作: 确认新的操作系统版本是否能够满足您的业务需求,并且与您使用的应用程序兼容。 进行备份,在迁移后可以还原数据,还可以在问题发生时恢复数据。 在新服务器上重新安装…

    Azure 2023年5月25日
    00
  • sql server管理工具Navicat for sql server 12安装及激活教程(附注册机)

    下面是详细的攻略步骤: 安装Navicat for SQL Server 12 首先,下载Navicat for SQL Server 12的安装包。可以在官方网站或第三方软件下载站下载到。 双击安装包,开始安装,根据提示一步一步安装。 安装完成之后,打开Navicat for SQL Server 12,输入激活码进行激活。 激活Navicat for S…

    Azure 2023年5月26日
    00
  • 2021最新win10笔记本激活码/秘钥推荐 附激活工具

    2021最新win10笔记本激活码/秘钥推荐 附激活工具 如果你购买的是没有激活Windows系统的笔记本,那么你需要购买Windows激活码或秘钥进行激活。本文将介绍2021年最新的Win10笔记本激活码/秘钥推荐,以及如何使用激活工具来激活。 Win10笔记本激活码/秘钥推荐 Win10激活码/秘钥可以从官方渠道或第三方网站购买。以下是一些我们推荐的Wi…

    Azure 2023年5月25日
    00
  • 升级后让设备性能变慢的后续回应: 微软撤回Win10 KB4559309更新

    首先,我们需要了解关于KB4559309更新的情况。这是一次针对Windows 10版本1903、1909和2004的累积更新,发布日期为2020年6月9日。该更新解决了多项问题,其中包括Windows Shell、Microsoft Edge和Windows App Platform and Frameworks等方面的改进。 然而,许多Windows 1…

    Azure 2023年5月25日
    00
  • Visual Studio Code如何设置中文?VS Code使用详细图文教程

    Visual Studio Code如何设置中文?VS Code使用详细图文教程 Visual Studio Code 是当前最流行的一款跨平台轻量级编辑器。它支持多种编程语言和插件,并且有着良好的用户体验。对于习惯使用中文的用户来说,最好把 VS Code 的界面和菜单设置为中文。下面是设置 Visual Studio Code 中文界面的详细步骤。 步骤…

    Azure 2023年5月25日
    00
  • Win10更新四月版17134(1803) MSDN官方ISO镜像正式版下载地址(附SDK下载+移除内容大全)

    首先,需要明确一点,这篇文章涉及到的内容是关于Win10更新四月版17134(1803) MSDN官方ISO镜像正式版的下载地址及安装方法、SDK的下载地址以及如何移除一些不必要的内容。下面将分步介绍每一步的操作方法: 1. Win10更新四月版17134(1803) MSDN官方ISO镜像正式版下载地址 首先,你需要前往MSDN官方网站(https://m…

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