开发者社区> 小结巴巴> 正文

js/jq仿window文件夹移动/剪切/复制等操作

简介: 1.先看下效果吧!   2.在添加一个index.html Title ul{list-style: none;min-height: 100px;min-width: 100px;background: #eee;} li{width:20...
+关注继续查看
1.先看下效果吧!

 

2.在添加一个index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <script src="./jquery-1.12.4.min.js"></script>
</head>
<style>
    ul{list-style: none;min-height: 100px;min-width: 100px;background: #eee;}
    li{width:200px;margin:10px;float:left;height: 200px;background: #ccc;border: 1px solid #fff;overflow: hidden}
    .selected{border: 1px solid red}
</style>
<body>
    <ul class="test-box">
        <div style="clear: both"></div>
    </ul>
    <ul class='clearfix test' >
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <li><img src="./defaultlogo.jpg" alt=""></li>
        <div style="clear: both"></div>
    </ul>

</body>
</html>

  

3.添加插件

上一篇文章里面有 areaSelect.js 框选插件,用于我们框选我们要移动的内容,没有看的同志可以去上一篇复制过来。

添加 OptionFile 操作对象

 var OptionFile=(function (opt) {
            var o={
                width:100,    //
                height:100,
                gapWidth:2
            };
            var o = $.extend(o,opt),
                _body=$('body'),
                boxBg='<div style="position: absolute;height: 100%;width: 100%;background: rgba(225,225,225,1);left: 0;top: 0;z-index: 1"></div>',
                movingBox='<div class="moving-box" style="width: '+o.width+'px;height: '+o.height+'px;box-sizing:border-box;position: absolute;z-index: 8888;"></div>';
            return {
                actionLock:false, //移动锁定
                releaseTarget:false, //释放锁定
                keyCode:null,   //当前按键 键值
                //鼠标按下操作
                optionDown:function ( selectFile , type , evt ) {
                    this.releaseTarget=false;
                    this.getImgList(selectFile);
                    var currentX=evt.pageX;
                    var currentY=evt.pageY;
                    $('.moving-box').css({
                        top:currentY+10,
                        left:currentX+10
                    })
                },
                //鼠标移动操作
                optionMoving:function (selectFile , type , evt ) {
                    if(this.actionLock){
                        this.optionDown(selectFile , type , evt );
                    }
                },
                getImgList:function (selectFile) {
                    var length = selectFile .length,
                        imgWidth = o.width-10-(length)*o.gapWidth,
                        imgHeight = o.height-10-(length)*o.gapWidth;
                    if(!this.actionLock){
                        _body.append(movingBox);
                        $('.moving-box').append(boxBg);
                        $.each(selectFile,function (k, v) {
                            var img = '<img style="width:'+imgWidth+'px;height:'+imgHeight+'px;z-index:'+(k+2)+';position:absolute;right:'+(k+1)*o.gapWidth+'px;top:'+(k+1)*o.gapWidth+'px" src="'+v.src+'"/>';
                            $('.moving-box').append(img);
                        });
                    }
                    this.actionLock=true;
                },
                //放开鼠标操作(回调函数,返回按键键值和当前目标)
                closeOption:function (func) {
                    var _this= this;
                    $(document).keydown(function (event) {
                        _this.keyCode=event.keyCode;
                        $(document).on('mouseup',function (e) {
                            if(!_this.releaseTarget){
                                $('.moving-box').remove();
                                _this.actionLock=false;
                                $(document).unbind('mousemove');
                                _this.releaseTarget=true;
                                func(e,_this.keyCode);                  //返回当前 释放的  目标元素  ,  和按键code
                                $(document).unbind('keydown');
                                _this.keyCode=null;
                            }
                        })
                    });
                    $(document).trigger("keydown");
                    $(document).keyup(function (event){
                        $(document).unbind('keyup');
                        $(document).unbind('keydown');
                        _this.keyCode=null;
                    })
                }
            }
        })

  

4.绑定函数和操作
        $(function () {
            $(function () {
                $('.test').areaSelect()    //框选操作
            })
             var optionImg= new OptionFile();
             $('.test li').on("mousedown",function(e){
                 if($(this).hasClass('selected')) {
                     e.preventDefault();
                     e.stopPropagation();
                 }
                 var firstImg = $(this).find('img'),
                     currentList=$('.test li.selected img');  //框选的图片list,用于移动的时候显示
                 currentList.push({src:firstImg.attr('src')});  //移动时候的第一张图片
                 var loop = setTimeout(function () {
                     optionImg.optionDown(currentList,1,e );
                     $(document).mousemove(function (e) {
                         optionImg.optionMoving(currentList,1,e);
                         optionImg.closeOption(function (e,keycode) {
                             var target=$(e.target);    //目标位置  可以判断目标不同位置执行不同操作
                             console.log(keycode);      //拖拽放开时候是否有按键 keycode 按键的值    可以通过不同的 keycode 来执行不同操作
                             target.prepend($('.test li.selected'))
                         });
                     });
                 },200);
                 $(document).mouseup(function () {
                     clearTimeout(loop);
                 });
             });
        })

  

OK!  现在可以看效果了,插件可以自己扩张和修改。

上面 可以 keycode 不同按键值  完成不同的操作,如 移动、剪切、复制、粘贴等。。

 

个人博客 :很多好用的 npm 包 , 可以看看  https://gilea.cn/ 

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
前端祖传三件套JavaScript的DOM之DOM操作的动态脚本
在前端开发中,动态脚本是一种非常重要的技术。它可以通过 DOM 操作来动态地创建和加载 JavaScript 脚本,并实现一些特殊的功能。本文将介绍如何使用 DOM 操作进行动态脚本的创建和加载。
5 0
html+css+js+jq简单实现原神官网动态效果
html+css+js+jq简单实现原神官网动态效果
65 0
SAP UI5 应用如何采取 JavaScript 代码调用 OData API 读取满足过滤条件的业务数据($filter 操作)试读版
SAP UI5 应用如何采取 JavaScript 代码调用 OData API 读取满足过滤条件的业务数据($filter 操作)试读版
16 0
WebAssembly-C与JS互相操作
JS调用C函数 推荐阅读指数 ⭐️⭐️⭐️⭐️ JS函数注入C环境 推荐阅读指数 ⭐️⭐️⭐️⭐️ 单向透明的内存模型 推荐阅读指数 ⭐️⭐️⭐️ JS与C/C++交换数据 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️ EM_ASM系列宏 推荐阅读指数 ⭐️⭐️⭐️ emscripten_run_script() 推荐阅读指数 ⭐️⭐️⭐️ ccall() 推荐阅读指数 ⭐️⭐️⭐️
23 0
【JavaScript】用类的操作对CSDN社区管理菜单栏优化
【JavaScript】用类的操作对CSDN社区管理菜单栏优化
17 0
【JavaScript】DOM增删改的操作
【JavaScript】DOM增删改的操作
10 0
js:Array数组插入元素操作的4种方式
js:Array数组插入元素操作的4种方式
26 0
JavaScript 中数组的常见操作
当我们在使用 JavaScript 编写代码时,经常会用到数组。数组是一种用于存储一系列值的数据结构。当我们需要处理一组数据时,使用数组可以方便地对数据进行排序、过滤和计算等操作。在本文中,我们将介绍 JavaScript 中数组的常见操作,以及一些使用数组的最佳实践。
22 0
JavaScript DOM操作
JavaScript DOM操作
29 0
JavaScript BOM操作
JavaScript BOM操作
35 0
+关注
小结巴巴
高级前端工程师,喜欢写一些总结和例子
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
在 IoT 设备进行 JavaScript 开发的探索之路
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
相关实验场景
更多