js-实现常见的拖拽效果(表单滑块验证)

摘要:
本文将详细介绍拖动的实现过程。js的三个事件将用于完成拖动效果。如果没有拖到右端,它将自动返回。效果如下:具体实现代码如下:˂!

本文将详细介绍拖拽的实现过程,会使用到js的三个事件(鼠标按下mousedown、鼠标移动mousemove、鼠标抬起mouseup),利用这三个事件即可完成拖拽效果。

在没有拖拽到最右端的情况下,会自动返回,效果图如下:

js-实现常见的拖拽效果(表单滑块验证)第1张

具体实现代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
             300px;
            height: 30px;
            margin: 40px auto;
            border: 1px #eee solid;
            position: relative;
        }
        p{
            padding: 0;
            margin: 0;
            float: left;
            height: 30px;
            background: yellow;
        }
        span{
            float: left;
             30px;
            height: 30px;
            text-align: center;
            line-height: 30px;
            background-color: violet;
            position: absolute;
            cursor: pointer;;
        }
    </style>
</head>
<body>
    <div>
        <p></p><span>>></span>
    </div>
</body>
<script src="http://t.zoukankan.com/move.js"></script>
<script>
    class tz{
        constructor(){
            this.div = document.querySelector('div');
            this.p = document.querySelector('p');
            this.span = document.querySelector('span');
            this.init();
        }
        init(){
            // 鼠标按下记录坐标
            this.span.onmousedown = (eve)=>{
                var e = eve || window.event;
                this.left = e.offsetX;
                // 鼠标按下之后执行后面的鼠标移动和鼠标抬起
                this.move();
                this.up();
            }
        }
        // 鼠标移动事件
        move(){
            var that = this;
            document.onmousemove = function(eve){
                var e = eve || window.event;                
                that.l = e.pageX- that.div.offsetLeft - that.left;
                if(that.l<0){that.l=0};
                if(that.l > that.div.offsetWidth - that.span.offsetWidth){
                    that.l = that.div.offsetWidth - that.span.offsetWidth;
                    that.span.innerHTML = '√';
                }
                that.span.style.left = that.l + 'px';
                that.p.style.width = that.l + 'px';
                return false;
            }
        }
        // 鼠标抬起事件
        up(){
            document.onmouseup = ()=>{
                document.onmousemove=null;
                document.onmouseup = null;
                if(this.l< this.div.offsetWidth - this.span.offsetWidth){
                    move(this.span,{left:0});
                    move(this.p,{0});
                }
            }
        }
    }
    new tz();
</script>
</html>
 
 
如果有什么疑问,请在评论区留言

免责声明:文章转载自《js-实现常见的拖拽效果(表单滑块验证)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇K8S(二)-创建一个pod应用C#操作Excel下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

(转)高性能JavaScript:加载和运行(动态加载JS代码)

浏览器是如何加载JS的 当浏览器遇到一个<script>标签时,浏览器首先根据标签src属性下载JavaScript代码,然后运行JavaScript代码,继而继续解析和翻译页面。如果需要加载的js文件很多很大,则会让人感觉页面加载很慢,影响页面的交互。浏览器在遇到<body>之前,不会渲染页面的任何部分,如果此时<head...

Java web开发——文件的上传和下载

一、 功能性需求与非功能性需求 要求操作便利,一次选择多个文件和文件夹进行上传;支持PC端全平台操作系统,Windows,Linux,Mac 支持文件和文件夹的批量下载,断点续传。刷新页面后继续传输。关闭浏览器后保留进度信息。 支持文件夹批量上传下载,服务器端保留文件夹层级结构,服务器端文件夹层级结构与本地相同。 支持大文件批量上传(20G)和下载,同时需...

js大文件上传解决方案支持分片断点上传

文件夹上传:从前端到后端 文件上传是 Web 开发肯定会碰到的问题,而文件夹上传则更加难缠。网上关于文件夹上传的资料多集中在前端,缺少对于后端的关注,然后讲某个后端框架文件上传的文章又不会涉及文件夹。今天研究了一下这个问题,在此记录。 先说两个问题: 是否所有后端框架都支持文件夹上传? 是否所有浏览器都支持文件夹上传? 第一个问题:YES,第二个问题:NO...

一行js代码实现时间戳转时间格式

前端开发过程中,常常需要将时间戳转化为标准时间格式供用户浏览。不借助方法库的情况下,如何又快又好的实现呢?下面介绍两种方法。 老方法 平常用的基本是这个方法,用Date方法依次将年月日时分秒一个个算出来,然后拼接成需要的时间格式字符串。 function transformTime(timestamp = +new Date()) { if (ti...

Js添加、读取、删除cookie,判断cookie是否有效,指定domain域下主路径path下设置cookie,设置expires过期时间...

https://www.cnblogs.com/codeon/p/7403418.html 有时我们需要用cookie保存用户名,记录登录状态,如何正确判断该机用户cookie是否存在呢?不能简单使用a!=”这样的写法。 正确方法是:判断是否存在名为username3的cookie,使用document.cookie.indexOf(“username3...

JS中数组的方法

在js中数组的重要性不言而喻,下面就来介绍一些数组的常用方法 一、基本方法 1.增 ①. arr.push() 在数组的末尾添加一个元素。 var arr = [1,2,3,4]; var newArr = arr.push(8); console.log(arr);  //(5) [1, 2, 3, 4, 8] 该方法会改变原数组,在数组...