纯JS控制DIV选择范围移动与复制

纯原生JavaScript音乐播放器开发:Web Audio API与Canvas可视化实战 在Web开发领域,音频处理与可视化是提升用户体验的关键技术。其核心原理在于浏览器提供的Web Audio API,它允许开发者直接操作音频数据流,进行解码、分析和实时控制。这项技术的工程价值在于,它让复杂音频处理的前端实现成为可能,无需依赖第三方插件或后端服务。在实际应用中,Web Audio API常与Canvas绘图结合,用于创建动态频谱、波形等音频可视化效果,这在音乐播放器、音频编辑器、游戏音效等场景中尤为常见。本文聚焦于一个具体的实战项目——构建一个功能完整的纯原生音乐播放器,深入探讨了如何利用We 阅读详情

 

<html>
    
<head>
        
<title>纯JS控制DIV选择范围移动与复制</title>
    
</head>
<body onselectstart="return false">
<script language="javascript" type="text/javascript">
    
var copyNo = 0;
    
var eventType = "nothing";        //"nothing"无事件,"selecting"选择中,"isSelected"选择判断中,"keepSelect"继续选择,"keepSelecting"继续选择中,"selected"确认选择,"move"移动中, "isMoved"继续移动,"moved"确认移动,"keepMove"继续移动, "reMove"重新移动
    var oX,oY,nX,nY;
    
var oLeft,oTop;
    
var selectDiv;
    
var cloneDiv;
    
var borderArea;
    
var changeDiv;
    
var oTime;
    
    
//创建DIV
    function createDiv(divID, divLeft, divTop)
    
{
        
var div = document.createElement("div");
        div.id 
= divID;
        div.group 
= "divGroup";
        div.selectBorder 
= "#996600 3px solid";
        div.noSelectBorder 
= "#000000 1px solid";
        div.isSelect 
= false;
        div.style.cssText 
= "width: 250px; height: 50px; left: " + divLeft + "; top: " + divTop + "; border: #000000 1px solid; text-align: center; position: absolute; background-color: #f5f5f5";
        div.innerHTML 
= "<table style="width: 100%; height: 100%; text-align: center; vertical-align: middle"><tr><td>coding by pippe<br /><a href='mailto:pippe@163.com'>pippe@163.com</a></td></tr>";
        document.body.appendChild(div);
    }

    
    createDiv(
"oldDiv1", "100px", "400px");
    createDiv(
"oldDiv2", "400px", "400px");
    createDiv(
"oldDiv3", "700px", "400px");
    
    
//左键按下事件
    function eventDown()
    
{
        
//左键
        if (event.button == 1)
        
{
            oX 
= document.body.scrollLeft + event.clientX;
            oY 
= document.body.scrollTop + event.clientY;            
            
switch(eventType)
            
{
                
case "nothing":
                    
//初次选择
                case "keepSelect":
                    
//继续选择
                    eventType = eventType == "nothing" ? "selecting" : "keepSelecting";
                    borderArea 
= document.createElement("div");
                    borderArea.id 
= "borderArea";
                    borderArea.style.left 
= oX + "px";
                    borderArea.style.top 
= oY + "px";
                    borderArea.style.position 
= "absolute";
                    borderArea.style.border 
= "#FF7700 1PX dotted";
                    document.body.appendChild(borderArea);
                    
break;
                
case "selected":
                    
var len = selectDiv.length;
                    cloneDiv 
= new Array();
                    oLeft 
= new Array();
                    oTop 
= new Array();
                    
for (var i = 0; i < len; i++)
                    
{
                        cloneDiv[i] 
= selectDiv[i].cloneNode(true);
                        cloneDiv[i].style.filter 
= "alpha(opacity=50)";
                        oLeft[i] 
= parseInt(cloneDiv[i].style.left);
                        oTop[i] 
= parseInt(cloneDiv[i].style.top);
                        document.body.appendChild(cloneDiv[i]);
                        cloneDiv[i].setCapture();
                    }

                    eventType 
= "move";
                    
break;
            }

        }

    }

    
    
//拖动事件
    function eventMove()
    
{
        
if (event.button == 1)
        
{
            nX 
= document.body.scrollLeft + event.clientX;
            nY 
= document.body.scrollTop + event.clientY;
            
//选择范围
            switch (eventType)
            
{
                
case "selecting":
                    
//初次选择
                case "keepSelecting":
                    
//继续选择
                    borderArea.style.left = nX <= oX ? nX + "px" : oX + "px";
                    borderArea.style.top 
= nY <= oY ? nY + "px" : oY + "px";
                    borderArea.style.width 
= nX >= oX ? nX - oX : oX - nX;
                    borderArea.style.height 
= nY >= oY ? nY - oY : oY - nY;
                    
                    
var theDivs = document.getElementsByTagName("div");
                    
var len = theDivs.length;
                    
var thisLeft, thisTop, thisRight, thirBottom;
                    
var x1,y1,x2,y2;
                    x2 
= nX <= oX ? oX : nX;
                    x1 
= nX <= oX ? nX : oX;
                    y2 
= nY <= oY ? oY : nY;
                    y1 
= nY <= oY ? nY : oY;
                    
for (var i = 0; i < len; i++)
                    
{
                        
if (theDivs[i].group != "divGroup")
                        
{
                            
continue;
                        }

                        thisLeft 
= parseInt(theDivs[i].style.left);
                        thisRight 
= thisLeft + parseInt(theDivs[i].style.width);
                        thisTop 
= parseInt(theDivs[i].style.top);
                        thisBottom 
= thisTop + parseInt(theDivs[i].style.height);
                        
//判断是否在选择框范围内
                        if ((((thisLeft > x1 && thisLeft < x2) || (thisRight > x1 && thisRight < x2)) && ((thisTop > y1 && thisTop < y2) || (thisBottom > y1 && thisBottom < y2)))
                            
|| (((x1 > thisLeft && x1 < thisRight) || (x2 > thisLeft && x2 < thisRight)) && ((y1 > thisTop && y1 < thisBottom) || (y2 > thisTop && y2 < thisBottom))))
                        
{
                            
if (theDivs[i].isSelect == false)
                            
{
                                theDivs[i].style.border 
= theDivs[i].selectBorder;
                                theDivs[i].isSelect 
= true;
                            }

                        }

                        
else if (theDivs[i].isSelect == true)
                        
{
                            
if (eventType == "selecting")
                            
{
                                
//初次选择
                                theDivs[i].style.border = theDivs[i].noSelectBorder;
                                theDivs[i].isSelect 
= false;
                            }

                            
else
                            
{
                                
//继续选择中
                                var len = selectDiv.length;
                                
var isTrue = false;
                                
for (var j = 0; j < len; j++)
                                
{
                                    
if (theDivs[i].isSelect == true && theDivs[i] == selectDiv[j])
                                    
{
                                        isTrue 
= true;
                                        
//break;
                                    }

                                }

                                
if (!isTrue)
                                
{
                                    theDivs[i].style.border 
= theDivs[i].noSelectBorder;
                                    theDivs[i].isSelect 
= false;
                                }

                            }

                        }

                    }

                    
break;
                
case "move":
                    
//移动中
                    var len = cloneDiv.length;
                    
for (var i = 0; i < len; i++)
                    
{
                        cloneDiv[i].style.left 
= (oLeft[i] + nX - oX) + "px";
                        cloneDiv[i].style.top 
= (oTop[i] + nY - oY) + "px";
                    }

                    
break;
            }

        }

    }

    
    
//拖移结束
    function eventUp()
    
{
        nX 
= document.body.scrollLeft + event.clientX;
        nY 
= document.body.scrollTop + event.clientY;
        
//选择范围
        switch(eventType)
        
{
            
case "selecting":
                
//初次选择
            case "keepSelecting":
                
//继续选择
                if (borderArea)
                
{
                    document.body.removeChild(borderArea);
                    borderArea 
= null;
                }


                
//存储选中的DIV
                var divs = document.getElementsByTagName("div");
                
var len = divs.length;
                
var count = 0;
                selectDiv 
= new Array();
                
for(var i = 0; i < len; i++)
                
{
                    
if (divs[i].group == "divGroup" && divs[i].isSelect == true)
                    
{
                        selectDiv[count] 
= divs[i];
                        count
++;
                    }

                }

                
//有选中
                if (count > 0)
                
{
                    eventType 
= "isSelected";
                    createChange();
                }

                
else
                
{
                    eventType 
= "nothing";
                }

                
                
break;
            
case "move":
                
//移动结束(左键松开)
                eventType = "";
                
var len = cloneDiv.length;
                
var aimLeft, aimTop;
                
for (var i = 0; i < len; i++)
                
{
                    cloneDiv[i].releaseCapture();
                    aimLeft 
= parseInt(cloneDiv[i].style.left);
                    aimTop 
= parseInt(cloneDiv[i].style.top);
                    event.ctrlKey 
? cloneDiv[i].style.left = selectDiv[i].style.left : null;
                    event.ctrlKey 
? cloneDiv[i].style.top = selectDiv[i].style.top : null;
                    move(i, aimLeft, aimTop, event.ctrlKey);
                }

                
break;
            
case "nothing":
                
//恢复初始化
            default:
                
break;
        }

    }

    
    
//移动的动画
    function move(divIndex, aimLeft, aimTop, isCtrlKey)
    
{
        
var moveSize = 30;
        
var nowLeft, nowTop;
        
if (!isCtrlKey)
        
{
            
//未按住CTRL移动
            nowLeft = parseInt(selectDiv[divIndex].style.left);
            nowTop 
= parseInt(selectDiv[divIndex].style.top);
            
if (nowLeft > aimLeft + moveSize || nowLeft < aimLeft - moveSize || nowTop > aimTop + moveSize || nowTop < aimTop - moveSize)
            
{
                selectDiv[divIndex].style.left 
= aimLeft > nowLeft + moveSize ? (nowLeft + moveSize) + "px" : aimLeft < nowLeft - moveSize ? (nowLeft - moveSize) + "px" : nowLeft + "px";
                selectDiv[divIndex].style.top 
= aimTop > nowTop + moveSize ? (nowTop + moveSize) + "px" : aimTop < nowTop - moveSize ? (nowTop - moveSize) + "px" : nowTop + "px";
                oTime 
= setTimeout("move(" + divIndex + ", " + aimLeft + ", " + aimTop + ", " + isCtrlKey + ")", 1);
            }

            
else
            
{
                selectDiv[divIndex].style.left 
= aimLeft;
                selectDiv[divIndex].style.top 
= aimTop;
                cloneDiv[divIndex].parentNode.removeChild(cloneDiv[divIndex]);
                eventType 
= "isMoved";
                createChange();
            }

        }

        
else
        
{
            
//按住CTRL复制
            nowLeft = parseInt(cloneDiv[divIndex].style.left);
            nowTop 
= parseInt(cloneDiv[divIndex].style.top);
            
if (nowLeft > aimLeft + moveSize || nowLeft < aimLeft - moveSize || nowTop > aimTop + moveSize || nowTop < aimTop - moveSize)
            
{
                cloneDiv[divIndex].style.left 
= aimLeft > nowLeft + moveSize ? (nowLeft + moveSize) + "px" : aimLeft < nowLeft - moveSize ? (nowLeft - moveSize) + "px" : nowLeft + "px";
                cloneDiv[divIndex].style.top 
= aimTop > nowTop + moveSize ? (nowTop + moveSize) + "px" : aimTop < nowTop - moveSize ? (nowTop - moveSize) + "px" : nowTop + "px";
                oTime 
= setTimeout("move(" + divIndex + ", " + aimLeft + ", " + aimTop + ", " + isCtrlKey + ")", 1);
            }

            
else
            
{
                cloneDiv[divIndex].style.left 
= aimLeft;
                cloneDiv[divIndex].style.top 
= aimTop;
                copyNo
++;
                cloneDiv[divIndex].id 
= "copyDiv" + copyNo;
                cloneDiv[divIndex].style.border 
= cloneDiv[divIndex].noSelectBorder;
                cloneDiv[divIndex].isSelect 
= false;
                cloneDiv[divIndex].style.filter 
= null;
                cloneDiv[divIndex].innerHTML 
= cloneDiv[divIndex].id;
                eventType 
= "isMoved";
                createChange();
            }

        }

    }

    
    
//创建提示框
    function createChange()
    
{
        
if (!changeDiv)
        
{
            changeDiv 
= document.createElement("div");
            changeDiv.style.cssText 
= "width: 0px; height: 0px; position: absolute; border: #038585 1px solid; background-color: #EBFFFF;";
            changeDiv.style.left 
= nX + "px"
            changeDiv.style.top 
= nY + "px"
            document.body.appendChild(changeDiv);
            scrollTo(nX, nY);
            setChange();
        }

    }

    
    
//设置提示框
    function setChange()
    
{
        
var thisWidth = parseInt(changeDiv.style.width);
        
var thisHeight = parseInt(changeDiv.style.height);
        
if (thisWidth < 300 || thisHeight < 100)
        
{
            changeDiv.style.width 
= thisWidth < 300 ? thisWidth + 25 + "px" : "300px";
            changeDiv.style.height 
= thisHeight < 100 ? thisHeight + 25 + "px" : "100px";
            setTimeout(
"setChange()", 1);
        }

        
else
        
{
            
switch(eventType)
            
{
                
case "isSelected":
                    
var titleDiv = document.createElement("div");
                    titleDiv.style.cssText 
= "width: 100%; height: 20px; background-color: #17C7C7; text-align: center; margin: 1px";
                    titleDiv.innerHTML 
= "<span style='height: 100%; color: #012828; margin-top: 5px'>确认选择?</span>";
                    changeDiv.appendChild(titleDiv);
                    createBtn(
"selected", "确定选择", "20px");
                    createBtn(
"keepSelect", "继续选择", "110px");
                    createBtn(
"nothing", "重新选择", "200px");
                    
break;
                
case "isMoved":
                    
var titleDiv = document.createElement("div");
                    titleDiv.style.cssText 
= "width: 100%; height: 20px; background-color: #17C7C7; text-align: center; margin: 1px";
                    titleDiv.innerHTML 
= "<span style='height: 100%; color: #012828; margin-top: 5px'>确认移动?</span>";
                    changeDiv.appendChild(titleDiv);
                    createBtn(
"moved", "确定移动", "20px");
                    createBtn(
"keepMove", "继续移动", "110px");
                    createBtn(
"reMove", "撤销移动", "200px");
                    
break;
            }

        }

    }

    
    
//创建按钮
    function createBtn(changeType, btnText, theLeft)
    
{
        
var bgColor1 = "#89E3E4", bgColor2 = "#FFA76D";
        
var color1 = "#113E3F", color2 = "#381701";
        
var bdColor1 = "#256162", bdColor2 = "#7F3A0C";
        
var newDiv = document.createElement("div");
        newDiv.style.cssText 
= "left: " + theLeft + "; top: 45px; width: 80px; height: 20px; position: absolute; background-color: " + bgColor1 + "; text-align: center; margin: 1px; color: " + color1 + "; border: " + bdColor1 + " 1px solid; cursor: pointer";
        newDiv.innerHTML 
= "<span style='height: 100%; text-align: center; margin-top: 5px' onselectstart='return false'>" + btnText + "</span>";
        newDiv.setAttribute(
"onmouseover", function(){this.style.backgroundColor = bgColor2; this.style.color = color2; this.style.borderColor = bdColor2});
        newDiv.setAttribute(
"onmouseout", function(){this.style.backgroundColor = bgColor1; this.style.color = color1; this.style.borderColor = bdColor1});
        newDiv.setAttribute(
"onclick", function(){setEventType(changeType);});
        changeDiv.appendChild(newDiv);
    }

    
    
//变更eventType
    function setEventType(changeType)
    
{
        eventType 
= changeType;
        changeDiv 
? document.body.removeChild(changeDiv) : null;
        changeDiv 
= null;
        
switch(changeType)
        
{
            
case "selected":
                document.body.style.cursor 
= "move";
                
break;
            
case "keepMove":
                eventType 
= "selected";
                
break;
            
case "reMove":
                
var len = selectDiv.length;
                
for (var i = 0; i < len; i++)
                
{
                    selectDiv[i].style.left 
= oLeft[i] + "px";
                    selectDiv[i].style.top 
= oTop[i] + "px";
                    
if (cloneDiv[i])
                    
{
                        cloneDiv[i].parentNode.removeChild(cloneDiv[i]);
                    }

                }

                eventType 
= "selected";
                
break;
            
case "moved":
            
case "nothing":
                
var len = selectDiv.length;
                
for (var i = 0; i < len; i++)
                
{
                    selectDiv[i].style.border 
= selectDiv[i].noSelectBorder;
                    selectDiv[i].isSelect 
= false;
                    
if (cloneDiv && cloneDiv[i])
                    
{
                        cloneDiv[i].style.border 
= cloneDiv[i].noSelectBorder;
                        cloneDiv[i].isSelect 
= false;
                    }

                }

                
if (eventType != "nothing")
                
{
                    eventType 
= "nothing";
                    document.body.style.cursor 
= "default";
                }

                
break;
        }

    }

    
    document.onmousedown 
= eventDown;
    document.onmousemove 
= eventMove;
    document.onmouseup 
= eventUp;
</script>
</body>
</html>

 

操作说明:

  1. 按住左键拖动出现虚线选择框

  2. 虚线选择框经过DIV时,被选中的DIV边框会变粗变色,此时代表此DIV被选中;
    虚线选择框离开DIV时,DIV边框变回原来样式,此时代表此DIV未被选中

  3. 择需要移动或复制的DIV,释放鼠标左键后出现选择按钮框,有【确定选择】、【继续选择】、【重新选择】三个选项

    • 单击【继续选择】可在原来选择的DIV数量基础上继续选择,此时选择框离开原来选择的DIV原选择DIV也处在选择状态下
    • 单击【重新选择】前面所选择的所有DIV将恢复未选择状态
    • 单击【确认选择】后选择完成,此时鼠标图标变成移动图标 按住左键拖动,此时被选择的DIV会复制出半透明的层随着鼠标移动而移动

     

  4. 在想移动的目的地或复制的目的地释放鼠标左键,产生一段过度动画,如果未按住CTRL将把原位置移动到新位置,按住则复制一个DIV到新位置
    动画结束后,出现选择按钮框,有【确定移动】、【继续移动】、【撤销移动】三个选项

    • 单击【继续移动】可再次移动/复制选择的DIV
    • 单击【撤销移动】撤销本次操作,还原上一次移动/复制时的界面
    • 单击【确认移动】本次移动/复制完成,可通过第一步继续移动/复制
JS实现可拖动的DIV效果并限制范围区域 利用JS实现可拖动的DIV效果,在原有基础上增加的限制在一定区域内的效果。方便,易用。可以很方便地移动到您的工程里面 立即下载

相关推荐

纯JS控制DIV选择范围移动与复制(改进版)

未选择状态下,单击DIV上可选中此DIV。未选择状态下,单击在背景上按住左键拖动产生范围虚线框,在此范围虚线框内的DIV边框变粗变色为被选中,虚线框外的则不被选中。已选择状态下,按住Ctrl可再次选择,按住Ctrl的同时,单击在DIV上,如果DIV已被选中则取消本节点选择,反之选中此节点。已选择状态下,按住Ctrl的同时,如果单击在背景上按住左键拖动产生范围虚线框,在此范围虚线框内的DIV边框变粗变色为被选中,虚线框外的如果为上次已选中的则不仍然选中,否则不选中。释放后虚线消失,需要添加选择可重复第“3”,“4”步操作,多次选择的节点选中。快捷键选择,Ctrl +A全选,Ctrl +X反选,Ctrl +Z取消选择。移动位置,选中DIV后,如果单选组选中移动(-)(默认,快捷键为“-”)按住左键拖动位置后释放可批量移动位置,产生一段过度动画,不撤销选择的DIV可多次移动,如已移动完毕按Ctrl+Z撤销选择即可。复制节点,选中DIV后,如果单选组选中复制(+,快捷键为“+”),按住左键拖动位置后释放,产生一段过度动画,即复制选中的DIV,如复制完毕按Ctrl+Z取消选择即可。删除选中DIV,选中DIV后,按下按钮或者快捷键“Delete”、“.”可删除所有选中的DIV。

JS实现限制可移动div的移动范围

最近我的博客项目中需要用到可移动div框,虽然让div移动很简单,监听鼠标的坐标即可,但是如何限制可移动div的移动范围呢?这个问题困扰了我很久,我想了很久才有了解决方案。

qq_66968367的博客 1022

JS拖拽DIV后保存位置示例

本实例从通达OA工作桌面提取,包括js、css,浏览空白时,请将浏览器编码改为UTF-8

VUE实现Div内容全选和复制(键盘监听事件)

目录 1.VUE环境和工程搭建 2.引入Element UI 3.引入jquery 4.代码实现 5.效果 1.VUE环境和工程搭建 https://blog.youkuaiyun.com/qq_26154077/article/details/105470192 2.引入Element UI https://element.eleme.cn/#/zh-CN/component/installation 3.引入jquery https://blog.youkuaiyun.com/weixin_439

你是小新吗 2349

三菱A800变频器矢量控制实战:从速度控制到位置控制的PLG参数设置全解析

本文深入解析了三菱A800变频器结合FR-A8AP选件板与PLG(脉冲编码器)实现高精度矢量控制的实战应用。详细阐述了从速度控制、转矩控制到位置控制三种高级模式的切换逻辑、核心参数设置及硬件接线要点,帮助工程师充分发挥A800变频器的闭环控制潜力,应对复杂工业自动化场景。

weixin_28308325的博客 327

【智能体】零代码实战:Coze多智能体协作开发全流程解析

本文详细解析了Coze平台的多智能体协作开发全流程,从入门指南到实战技巧,帮助用户零代码构建高效AI团队。通过模块化设计和专业分工,多智能体系统能显著提升任务处理速度和准确率,适用于客服、内容创作、教育培训等多个场景。文章还提供了性能优化和常见问题解决方案,助力开发者快速掌握Multi-Agent技术。

weixin_29239279的博客 336

js 给div 添加选区,类似windows桌面选区一样,兼容ie6、7、8、9、10、Firefox、Google、所有浏览器

先来一张效果图: 兼容: IE6 反应有点迟钝,效果没有火狐好。 主要的效果就是,模仿windows桌面的那个选区。可以用选框选区图标。 由于js代码太多,只贴一段核心的代码。 js核心代码: //选区 function select(){ //为工作区创建一个选区 var _down=false; var pos={x:0,y:0}; var move

科技小潘 2404

CKEditor5富文本编辑器 - 视频引入、预览及自定义toolbar

文章目录定义遇到的问题视频部分引入媒体url失败原因解决方法:自定义视频provider视频预览及页面不显示视频问题解决方案:H5 \标签如何移除toolbar中的部分插件 一个小后端很少接触前端框架,只能在知识的海洋中漂泊。。。 定义 <script src="https://cdn.ckeditor.com/ckeditor5/16.0.0/classic/ckeditor.js"&gt...

huhui806的博客 8198

(JS\VUE\REACT) div拖拽移动+控制大小(高度、宽度) 及 单独只控制div的宽度

JS div拖拽移动+控制大小(高度、宽度) 及 单独只控制div的宽度。适用与原生JS、vue、react等多种形式

weixin_56383764的博客 2828

深入解析WIFI与蓝牙模块电路设计:从原理到实战

本文深入解析了WIFI与蓝牙模块的电路设计,从核心原理到实战应用。文章以AP6256模块为例,详细拆解了电源树、时钟电路、接口设计及天线射频路径等关键环节,并提供了PCB布局布线的实用准则与调试方法,旨在帮助硬件工程师设计出稳定可靠的无线产品,规避常见陷阱。

weixin_29186249的博客 150

PIC单片机应用开发实践教程(二): 新建工程

File---New ProjectMicrochip Embedded --- Standalone Project 选择所用MCU对应型号 点击 Finish 后,工程就建好了 至止,我们的一个新工程就建完成了!

qq_57798018的博客 2888

纯JS控制DIV选择范围移动与复制 改进版

     和上一个版本相比,增加了快捷键操作,增加了批量删除功能,改变了操作方式。html>head>    title>纯JS控制DIV选择范围移动与复制 改进版title>    style type="text/css">...    .newbtn{...}{margin-right:10px;border:solid 1px green;cursor:pointer;paddin

pippe的专栏 1653

道家学派创始人老子,对 SAP ABAP 这门编程语言的客观评价

SAP HANA 之引入,使 ABAP 于处理大数据,云计算等新兴领域,展现新的生命力,如老吾老以及人之老,幼吾幼以及人之幼,扩展其在信息技术领域的应用,以涵养更广之需。ABAP 能以数据为基,流转于系统之中,如道法自然,顺应企业之生态,助之以高效运转,减少冗杂,简化管理,使企之运营,如小国寡民,无为而治。然 ABAP 如老树盘根,更替不易,面对新兴技术,如云计算、大数据等,其更新之速,未能与时俱进。如水之于渊,柔而能胜刚,ABAP 之发展,顺时而动,应需而变,其在编程领域,犹如道之于万物,渐不可或缺矣。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1027

原生JS监听复制事件,更改复制的内容,或者在复制内容后面追加参数,原生JS控制按钮点击复制自定义内容,复制想要让复制的内容

原生 JS 监听 复制 copy 事件,追加版权信息 <div class="empty-font">空心字</div> <script type="text/javascript"> //监听整个页面的 copy 事件 document.addEventListener('copy',function(e){ // clipboardData 对象是为通过编辑菜单、快捷菜单和快捷键执行的编辑操作所保留的,也就是你复制或者剪切内容 let clipboardD

8170

华为OD机试 - 整型数组按照个位数排序(Python/JS/C/C++ 双机位C卷 100分)

本专栏收录于《华为OD机试真题(Python/JS/C/C++)》。刷的越多,抽中的概率越大,私信哪吒,备注华为OD,加入华为OD刷题交流群,每一题都有详细的答题思路、详细的代码注释、3个测试用例、为什么这道题采用XX算法、XX算法的适用场景,发现新题目,随时更新。给定一个非空数组(列表),其元素数据类型为整型,请按照数组元素十进制最低位从小到大进行排序,十进制最低位相同的元素,相对位置保持不变。当数组元素为负值时,十进制最低位等同于去除符号位后对应十进制值最低位。给定一个非空数组,其元素数据类型为32位有

学Java,找哪吒 399

梯度提升决策树GBDT原理与代码实例讲解

梯度提升决策树GBDT原理与代码实例讲解 1.背景介绍 1.1 机器学习发展历程 机器学习是人工智能领域的一个重要分支,旨在使计算机具备学习和改进自身性能的能力。随着大数据时代的到来,海量的数据为机器学习算法提供了广阔的应用空间。在

AI天才研究院 1089

JS复制文本到粘贴板,前端H5移动端点击按钮复制文本到粘贴板。

方案一: 最近做手机端H5网页里面有个活动:点击按钮复制邀请码。查过一些方法,在电脑端可以复制粘贴,一放在手机上面打开网页就不能复制粘贴了。 直接进入正题 使用开源项目 clipboard.js, 官网:点击打开链接 可以通过script标签引入 也可以通过npm安装,npm install clipboard.js --save-dev。 这个插件复制的对象必须是input 或者 ...

qq_32849999的博客 4122

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

js 原生js复制到粘贴板

优点: 代码少 纯元素JavaScript 无插件 无须服务器 知识点: createTextRange//ie 创建TextRange 对象 createRange//非ie 创建Range 对象 Range 对象 execCommand//允许用户对当前文档、当前选中区域或者给定范围执行一个浏览器内部命令 element.select()//Input Text select()方法;选取...

352328759的博客 2462

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

需要动态创建DIV

这是原来的CSS样式 .item{float:left;overflow:hidden;margin-left:8px;margin-top:10px;width: 320px; height: 250px;background-repeat: no-repeat; background-image:url(../images/bgred.jpg)} .curve{position:r...

long316的专栏 336

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

js 图片缩放不超出父级元素范围_JS之 图表库

阅读本文约需要6分钟大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈)。上次老师跟大家分享了Vue之复制内容到剪贴板的知识,今天跟大家分享下JS之 图表库的知识。1 图表库随着数据收集和使用的持续呈指数增长,可视化此数据的需求变得越来越重要。开发人员寻求将数百万个数据库记录整合为美观的图表和仪表板,以便人类可以快速直观地进行解释。数据可视...

weixin_39911567的博客 234

Javascript控制剪贴板大全

看到UBB代码[ code ]视窗的时候会有个"复制到剪贴板"的功能.我觉得很好用.   突然想到文件上传后,出现在"地址(路径)"位置的URL,给他加个复制的按钮吧.   研究了一下原来的代码..   定义函数   程序代码 1. function CopyText(obj) { 2. ie = (document.all)? true:false 3. if

smshuxue的专栏 980

别再手动写年份范围了!用这个Vue组件库的补丁方案,5分钟搞定

本文介绍了一种轻量级补丁方案,帮助开发者快速实现Element UI的年份范围选择功能。通过封装独立Vue组件,无需修改源码或引入重型库,即可在5分钟内集成与Element UI风格一致的年份范围选择器,适用于数据报表、统计分析等高频场景。

weixin_29012765的博客 244

JavaScript复制到剪切板全解析:从Clipboard API到兼容性实战

剪切板操作是Web开发中连接网页与用户操作系统的关键接口,其核心原理在于浏览器安全策略对用户交互上下文的严格要求。从技术演进角度看,早期广泛依赖的document.execCommand方法通过模拟用户手动选择与复制行为实现功能,而现代异步Clipboard API则提供了更标准、性能更优的解决方案。这两种方案的技术价值在于平衡功能实现、安全策略与跨浏览器兼容性,直接影响着电商优惠码分享、内容链接复制、后台数据导出等高频应用场景的用户体验。本文聚焦于复制到剪切板这一常见但易出错的开发需求,深入剖析了exec

weixin_30493401的博客 379

如何用纯CSS实现震撼滚动效果:视差滚动与固定导航完整指南

在现代网页设计中,滚动效果是提升用户体验的关键元素。You-Dont-Need-JavaScript项目展示了CSS的强大能力,无需编写任何JavaScript代码,就能实现令人惊叹的视差滚动和固定导航效果。本文将带你探索如何利用纯CSS技术打造专业级滚动体验,让你的网页设计脱颖而出。 ## 为什么选择纯CSS滚动效果? 纯CSS实现的滚动效果具有三大优势:加载速度更快、代码维护更简单、兼容性

gitblog_00303的博客 822
上一篇: 纯js操作div拖移/伸缩,拉动结束有渐变动画,支持快捷键
下一篇: 纯JS打造循环间隔滚动公告栏
pippe
博客等级 码龄19年 22粉丝 10原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值