返回顶部
首页 > 资讯 > 前端开发 > JavaScript >jquery+css实现移动端元素拖动排序
  • 141
分享到

jquery+css实现移动端元素拖动排序

2024-04-02 19:04:59 141人浏览 八月长安
摘要

本文实例为大家分享了Jquery+CSS实现移动端元素拖动排序的具体代码,供大家参考,具体内容如下 1.近期需要实现一个选项进行拖动排序的页面,页面如下: 2.jsP页面代码:

本文实例为大家分享了Jquery+CSS实现移动端元素拖动排序的具体代码,供大家参考,具体内容如下

1.近期需要实现一个选项进行拖动排序的页面,页面如下:

2.jsP页面代码:

​<body>
    <div class="main">
        <div id="drag-div" class="drag-div">
            <div class="others">
                <div class="test" style="height: 200px;width: 100%;"></div>
            </div>
            <div class="drag-inset-div">
                <div class="drag-div-elem" number="1">
                    <div class="payway-info">支XX代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
                <div class="drag-div-elem" number="2">
                    <div class="payway-info">微XX代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
                <div class="drag-div-elem" number="3">
                    <div class="payway-info">XXX银行代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
                <div class="drag-div-elem" number="4">
                    <div class="payway-info">AAA银行代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
                <div class="drag-div-elem" number="5">
                    <div class="payway-info">CCC银行代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
                <div class="drag-div-elem" number="6">
                    <div class="payway-info">SSS银行代扣</div>
                    <div class="drag-elem-btn">
                        <div class="drag-elem-btn-icon"></div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>

3.css样式代码

​body {
            background-color: #ffffff;    
            padding: 0;
            margin: 0;
        }
        .main{
            width: 100%;
            height: 100%;
            box-sizing: border-box;
            padding: 0px;
        }
        .drag-div{
            width: 100%;
            height:100%;
            overflow:auto;
            position: absolute;
        }
        .others{
            width: 100%;
            height: auto;
            background-color: #DDD000;
            position: relative;
        }
        .drag-div-elem{
            border-left: 1px solid #dddddd;
            border-right: 1px solid #dddddd;
            border-bottom:1px solid #dddddd;
            border-top: 1px solid #dddddd;
            width: 100%;
            height: 50px;
            background-color: #ffffff;
            position: absolute;
        }
        .drag-first-elem{
            border-top: 1px solid #dddddd;
        }
        .payway-info{
            width: 80%;
            height: 100%;
            float: left;
            padding-left: 15px;
            text-align: left;
            line-height: 50px;
            font-size: 20px;
        }
        .drag-elem-btn{
            width: 20%;
            max-width:60px;
            height: 48px;
            float: right;
            padding: 10px;
            border: 0px;
        }
        .drag-elem-btn-icon{
            width: 100%;
            height: 100%;
            border-left: 0px;
            border-right: 0px;
            border-top: 4px solid #dddddd;
            border-bottom:4px solid #dddddd;
            padding-bottom: 8px;
            padding-top: 8px;
            background-clip:content-box;
            background-color:  #dddddd;
        }
        .show-top{
            z-index: 20;
            filter:alpha(Opacity=70);
            -moz-opacity:0.7;
            opacity: 0.7;
            box-shadow:#000 0px 5px 6px 3px ;
        }
        .drag-inset-div{
            background-color: #dddddd;
        }

4.js代码


var isdrag = true;  //是否移动
var topHeight = $(".others").css("height");  //头部div的高度
var topHeightInt = 0;
var elementHeight = $(".drag-div-elem").css("height");  //每一个移动元素DIV的高度
var elementHeightInt = 0;
var halfElementHeightInt = 0;
var startEleCssTopInt;//元素div的起始时的top值
var lastTouchTempY = null;//上一次滑动时元素触摸点坐标
var startTouchY; //起始时的触摸点坐标
var choseEleNum = null; //选择的是第几个元素
var eleMoveDistance = 0;   //选择元素相对于其他元素的距离
var isNeedMoveEle = true;   //其他元素是否需要移动
var theMaxNumberAttr = null; //元素最大的number值
var theMinNumberAttr = null; //元素最小的number值
var theMaxMoveScope = null;  //可以移动的最大范围  ,最小范围为topHeightInt;
 
//开始移动
function dragStart(e) {
    isdrag = true;
    e.preventDefault();
    startTouchY = e.originalEvent.targetTouches[0].pageY;
    var obj = $(e.target);
    var paywayEleObj = obj.parents(".drag-div-elem");
    choseEleNum = $(paywayEleObj).attr("number");
    var startTouchCssTop = $(paywayEleObj).css("top");
    if (undefined == startTouchCssTop || null == startTouchCssTop
            || "auto" == startTouchCssTop) {
        startEleCssTopInt = topHeightInt;
    } else {
        startEleCssTopInt = parseInt(startTouchCssTop.substring(0,
                startTouchCssTop.length - 2));
    }
    $(paywayEleObj).addClass("show-top");
}
function dragMove(e) {
    var direction = "up";
    e.preventDefault();
  //获取移动的距离
    var moveTouchY = e.originalEvent.targetTouches[0].pageY; //获取第一个触点
    console.log("moveTouchY==="+moveTouchY);
    console.log("lastTouchTempY==="+lastTouchTempY);
    if (isdrag) {
        var obj = $(e.target);
        var paywayEleObj = obj.parents(".drag-div-elem");
        //判断是不是在可移动的范围内
        if(moveTouchY < topHeightInt || moveTouchY > theMaxMoveScope){
            return;
        }
        //此次滑动的距离
        var distance = moveTouchY - startTouchY;
        eleMoveDistance = eleMoveDistance + Math.abs((moveTouchY - (null == lastTouchTempY?startTouchY:lastTouchTempY)));
        if(null == lastTouchTempY){
            //向上滑动
            if(startTouchY > moveTouchY){
                direction = "up";
            }else{
                direction = "down";
            }
        }else{
            //向上滑动
            if(lastTouchTempY > moveTouchY){
                direction = "up";
            }else{
                direction = "down";
            }
        }
        var newCssTop = startEleCssTopInt + distance;
        if(newCssTop<0){
            return;
        }
        $(paywayEleObj).css({"top":newCssTop+"px"});
        console.log("eleMoveDistance==="+eleMoveDistance);
        //向下移动
        if("down" == direction && parseInt(theMaxNumberAttr) > parseInt(choseEleNum)){
            if(isNeedMoveEle && eleMoveDistance < elementHeightInt && eleMoveDistance >= halfElementHeightInt){
                isNeedMoveEle = false;
                var autoUpEleNum = parseInt(choseEleNum) + 1;
                var autoUpEleCssTop = $(".drag-div-elem[number='"+autoUpEleNum+"']").css("top");
                var autoUpEleCssTopInt = parseInt(autoUpEleCssTop.substring(0,autoUpEleCssTop.length-2));
                var autoUpEleNewTop = autoUpEleCssTopInt - (elementHeightInt + 1);
                $(".drag-div-elem[number='"+autoUpEleNum+"']").css({"top":autoUpEleNewTop+"px"});
                //换number
                $(".drag-div-elem[number='"+autoUpEleNum+"']").attr("number",choseEleNum);
                $(paywayEleObj).attr("number",autoUpEleNum);
                choseEleNum = autoUpEleNum;
            }else if(eleMoveDistance >= elementHeightInt){
                eleMoveDistance = 0;
                isNeedMoveEle = true;
            }
        }
        //向上移动
        if("up" == direction && parseInt(theMinNumberAttr) < parseInt(choseEleNum)){
            if(isNeedMoveEle && eleMoveDistance < elementHeightInt && eleMoveDistance >= halfElementHeightInt){
                isNeedMoveEle = false;
                var autoUpEleNum = parseInt(choseEleNum) - 1;
                var autoUpEleCssTop = $(".drag-div-elem[number='"+autoUpEleNum+"']").css("top");
                var autoUpEleCssTopInt = parseInt(autoUpEleCssTop.substring(0,autoUpEleCssTop.length-2));
                var autoUpEleNewTop = autoUpEleCssTopInt + (elementHeightInt + 1);
                $(".drag-div-elem[number='"+autoUpEleNum+"']").css({"top":autoUpEleNewTop+"px"});
                //换number
                $(".drag-div-elem[number='"+autoUpEleNum+"']").attr("number",choseEleNum);
                $(paywayEleObj).attr("number",autoUpEleNum);
                choseEleNum = autoUpEleNum;
            }else if(eleMoveDistance >= elementHeightInt){
                eleMoveDistance = 0;
                isNeedMoveEle = true;
            }
        }
        lastTouchTempY = moveTouchY;
    }
}
function dragEnd(e) {
    e.preventDefault();
    isdrag = false;
    lastTouchTempY = null;
    var obj = $(e.target);
    var paywayEleObj = obj.parents(".drag-div-elem");
    $(paywayEleObj).removeClass("show-top");
    //修正移动的元素的top
    var number = $(paywayEleObj).attr("number");
    var top = 0 + ( elementHeightInt + 1 ) * (parseInt(number)-1);
    $(paywayEleObj).css({"top":(top+topHeightInt)+"px"});
}
$(function(){
    topHeightInt = parseInt(topHeight.substring(0, topHeight.length - 2));
    elementHeightInt = parseInt(elementHeight.substring(0,elementHeight.length-2));
    halfElementHeightInt = parseInt(elementHeightInt+2) / 2;
    var elementDivArr = $(".drag-div").find(".drag-div-elem");
    theMinNumberAttr = $(elementDivArr[0]).attr("number");
    for(var i=0;i<elementDivArr.length;i++){
        var eleObj = elementDivArr[i];
        var number = $(eleObj).attr("number");
        theMaxNumberAttr = number;
        var top = 0 + ( elementHeightInt + 1 ) * (parseInt(number)-1);
        $(eleObj).css({"top":(top+topHeightInt)+"px"});
    }
    theMaxMoveScope = topHeightInt + number * ( elementHeightInt + 1 );
    $(".drag-inset-div").css("height",(number * ( elementHeightInt + 1 ) + 1) +"px");
    $(".drag-elem-btn").on("touchstart", dragStart);
    $(".drag-elem-btn").on("touchmove", dragMove);
    $(".drag-elem-btn").on("touchend", dragEnd);
});

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

--结束END--

本文标题: jquery+css实现移动端元素拖动排序

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

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

猜你喜欢
  • jquery+css实现移动端元素拖动排序
    本文实例为大家分享了jquery+css实现移动端元素拖动排序的具体代码,供大家参考,具体内容如下 1.近期需要实现一个选项进行拖动排序的页面,页面如下: 2.JSP页面代码:...
    99+
    2024-04-02
  • vue实现移动端touch拖拽排序
    目录功能介绍:大致需求:整体思路:简单效果展示:具体实现:一、display:flex+v-for布局:二、touch事件绑定:三、卡片移动:四、获取手指所在位置:五、操作数组(删除...
    99+
    2024-04-02
  • jQuery实现移动端悬浮拖动效果
    模拟手机端悬浮按钮功能,自动吸附两边,并且不能超过活动区域,上下超过自动吸附上或下 因为是移动端端事件,需要调试到移动端才可以看效果 以下是代码 <!DOCTYPE ht...
    99+
    2024-04-02
  • jquery实现表格行拖动排序
    本文实例为大家分享了jquery实现表格行拖动排序的具体代码,供大家参考,具体内容如下 引入JS <script src="jquery.min.js"></scr...
    99+
    2024-04-02
  • jquery实现移动端悬浮拖拽框
    使用jquery 实现了一个基础的悬浮弹拖拽窗, 根据自己的需求去完善动效。 分享给大家供大家参考,具体如下: 演示效果 代码块 需要引入jquery , 引入本地或线上根据自己的...
    99+
    2024-04-02
  • Jquery实现移动端控制DIV拖拽
    本文实例为大家分享了Jquery实现移动端控制DIV拖拽的具体代码,供大家参考,具体内容如下 需求:车型配置表,移动端需要滑动,并且多项配置的表需要联动对应头部分类名称 要求:左侧 ...
    99+
    2024-04-02
  • jQuery如何移动元素?
    ...
    99+
    2024-04-02
  • jquery如何实现表格行拖动排序
    这篇文章主要介绍了jquery如何实现表格行拖动排序,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体内容如下引入JS<script src="jq...
    99+
    2023-06-29
  • vue实现移动端div拖动效果
    本文实例为大家分享了vue实现移动端div拖动的具体代码,供大家参考,具体内容如下 手机上会偶尔用到拖动div的效果,虽然我自己还没遇到,先写一个以防万一,需要注明的是,具体实现代码...
    99+
    2024-04-02
  • vue实现图片拖动排序
    本文实例为大家分享了vue实现图片拖动排序的具体代码,供大家参考,具体内容如下 原理:现有一个图片的列表,拖动其中一个图片(触发dragstart),当拖动的图片移动到其他图片的位置...
    99+
    2024-04-02
  • vue怎么实现移动端div拖动效果
    本文小编为大家详细介绍“vue怎么实现移动端div拖动效果”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue怎么实现移动端div拖动效果”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1、分享代码html代码&...
    99+
    2023-06-29
  • Vue实用功能之实现拖拽元素、列表拖拽排序
    目录Vue实现拖拽元素、列表拖拽排序组件使用补充:排序动画总结Vue实现拖拽元素、列表拖拽排序 需求:    1、左右两个容器,左边和右边的元素可以拖动...
    99+
    2022-11-13
    vue列表拖拽排序 vue实现拖拽功能 vue实现组件拖拽
  • vue+ts实现元素鼠标拖动效果
    本文实例为大家分享了vue+ts实现元素鼠标拖动效果的具体代码,供大家参考,具体内容如下 实现效果 相关使用属性 // clientX 鼠标相对于浏览器左上角x轴的坐标; 不随...
    99+
    2024-04-02
  • vue实现移动端拖拽悬浮按钮
    目录功能介绍:大致需求:整体思路:具体实现:一、position:fixed布局:二、touch事件绑定:三、页面引入:本文实例为大家分享了vue实现移动端拖拽悬浮按钮的具体代码,供...
    99+
    2024-04-02
  • jquery实现移动端按钮组左右滑动
    本文实例为大家分享了jquery实现移动端按钮组左右滑动的具体代码,供大家参考,具体内容如下 学习移动端触摸相关功能时写了一个例子,共享一下,其中最不好理解的是screen、page...
    99+
    2024-04-02
  • iOS使用UICollectionView实现拖拽移动单元格
    目录一.介绍二.方法和步骤三.iOS9之后添加的API本文实例为大家分享了iOS开发UICollectionView拖拽移动单元格的具体代码,供大家参考,具体内容如下 一.介绍 iO...
    99+
    2024-04-02
  • 小程序拖动区域实现排序效果
    小程序拖动区域进行排序的具体代码,供大家参考,具体内容如下 需求:点击蓝色圆圈图标,所有区域进行展开或者收起切换,当所有区域收起时,点击区域头部文字或者空白处可进行拖动排序,效果如下...
    99+
    2024-04-02
  • JS实现元素的拖动与占位功能
    这篇博客,是博主这几天刚做的一个项目遇到的一个难点,学会了这个,你就能轻松实现页面元素的移动啦,再配合一些条件,就可以做出一个任务完成进度的页面了! 先来看看效果:  ...
    99+
    2024-04-02
  • jQuery如何实现动态创建元素?
    ...
    99+
    2024-04-02
  • vue实现移动端可拖拽式icon图标
    本文实例为大家分享了vue实现移动端可拖拽式icon图标的具体代码,供大家参考,具体内容如下 需求描述:在移动端页面悬浮一个可随便拖拽的图标,类似于苹果手机的辅助触控小圆点,并且可随...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作