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/ 

相关文章
|
4月前
|
JavaScript 前端开发
JavaScript Window Navigator
JavaScript Window Navigator
42 2
|
4月前
|
JavaScript 前端开发
JavaScript Window History
JavaScript Window History
25 1
|
4月前
|
JavaScript 前端开发
JavaScript Window Location
JavaScript Window Location
41 2
|
4月前
|
JavaScript 前端开发
JavaScript Window Screen
JavaScript Window Screen
49 3
|
4月前
|
Web App开发 JavaScript 前端开发
JavaScript Window - 浏览器对象模型
JavaScript Window - 浏览器对象模型
42 2
|
5月前
|
JavaScript
Node.js之文件夹的操作
Node.js之文件夹的操作
62 9
|
6月前
|
JavaScript
将jq转为原生js格式
将jq转为原生js格式
47 2
|
6月前
|
机器学习/深度学习 JavaScript
node.js实现遍历所有文件夹里面的js文件,提取所有的url
node.js实现遍历所有文件夹里面的js文件,提取所有的url
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
文本vitepress,如何设置背景图,如何插入背景图,如何插入logo,为了放背景图片,我们要新建pubilc的文件夹,插入logo要在config.js中进行配置,注意细节,在添加背景时,注意格式
|
7月前
|
JavaScript 前端开发 索引
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
JavaScript编码之路 【JavaScript之操作数组、字符串方法汇总】(三)
62 1

热门文章

最新文章

  • 1
    当面试官再问我JS闭包时,我能答出来的都在这里了。
    49
  • 2
    【02】仿站技术之python技术,看完学会再也不用去购买收费工具了-本次找了小影-感觉页面很好看-本次是爬取vue需要用到Puppeteer库用node.js扒一个app下载落地页-包括安卓android下载(简单)-ios苹果plist下载(稍微麻烦一丢丢)-优雅草卓伊凡
    29
  • 3
    Node.js 中实现多任务下载的并发控制策略
    34
  • 4
    【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
    26
  • 5
    【JavaScript】深入理解 let、var 和 const
    49
  • 6
    【04】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架二次开发准备工作-以及建立初步后端目录菜单列-优雅草卓伊凡商业项目实战
    47
  • 7
    【03】Java+若依+vue.js技术栈实现钱包积分管理系统项目-若依框架搭建-服务端-后台管理-整体搭建-优雅草卓伊凡商业项目实战
    57
  • 8
    【02】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-ui设计图figmaUI设计准备-figma汉化插件-mysql数据库设计-优雅草卓伊凡商业项目实战
    57
  • 9
    如何通过pm2以cluster模式多进程部署next.js(包括docker下的部署)
    72
  • 10
    【01】Java+若依+vue.js技术栈实现钱包积分管理系统项目-商业级电玩城积分系统商业项目实战-需求改为思维导图-设计数据库-确定基础架构和设计-优雅草卓伊凡商业项目实战
    57