js窗口拖拽

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .box{position:absolute; left:100px; top:100px; padding:5px; width: 300px;height: 200px;background:#f0f3f9; font-size:12px; -moz-box-shadow:2px 2px 4px #666666; -webkit-box-shadow:2px 2px 4px #666666;}
        .bar{width:100%;height: 30px;background: #ccc; }
    </style>
</head>
<body>
    <div id="box" class="box"><div id="bar" class="bar">拖拽</div></div>

    <script src="d2.js" type="text/javascript"></script>
    <script type="text/javascript">
        var oBox = document.getElementById("box");
        var oBar = document.getElementById("bar");
        startDrag("bar", oBox,true,function(left,top){
            // console.log(left);
        });
    </script>
</body>
</html>
/**
 * 纯js实现多div拖拽
 * @param bar, 拖拽触柄
 * @param target, 可拖动窗口
 * @param inWindow, 为true时只能在屏幕范围内拖拽
 * @param callback, 拖拽时执行的回调函数。包含两个参数,target的left和top
 * @returns {*}
 * @private
 */
var startDrag = function(bar,target,inWindow,callback){
    (function(bar,target,inWindow,callback){
        var D = document,
              DB = document.body,
              params = {
            top: 0,
            left: 0,
            currentX: 0,
            currentY: 0
              };
        bar = (typeof bar == "string")?D.getElementById(bar):bar;
        target = (typeof target == "string")?D.getElementById(target):target;
        bar.style.cursor = "move";
        bindHandler(bar,"mousedown",function(e){
            e.preventDefault();
            if(!e){
                e = window.event;
                bar.onselectstart = function(){
                    return false;
                }
            }
            params.top = target.offsetTop;
            params.left = target.offsetLeft;
            params.currentX = e.clientX;
            params.currentY = e.clientY;
            var stopDrag = function(){
                removeHander(bar,"mousemove",beginDrag);
                removeHander(bar,"mouseup",stopDrag);
            };
            var beginDrag = function(e){
                var evt = e?e:window.event;
                var nowX = e.clientX,nowY = e.clientY;
                var disX = nowX - params.currentX,disY = nowY - params.currentY;
                var left = parseInt(params.left) + disX,top = parseInt(params.top) + disY;
                if(inWindow){
                    var h = window.innerHeight||document.documentElement.clientHeight||document.body.clientHeight;
                    var w = window.innerWidth||document.documentElement.clientWidth||document.body.clientWidth;
                    var maxTop = h - target.offsetHeight;
                    var maxLeft = w - target.offsetWidth;
                    if(left <= 0){
                        left = 0;
                    }
                    if(left >= maxLeft){
                        left = maxLeft;
                    }
                    if(top <= 0){
                        top = 0;
                    }
                    if(top >= maxTop){
                        top = maxTop;
                    }
                }
                target.style.left = left + "px";
                target.style.top = top + "px";
                if(typeof callback == "function"){
                    callback(left,top);
                }
            };
            bindHandler(bar,"mousemove",beginDrag);
            bindHandler(document,"mouseup",stopDrag);
        });


        function bindHandler(elem,type,hander){
            if(window.addEventListener){
                elem.addEventListener(type,hander,false);
            }else if(window.attachEvent){
                elem.attachEvent("on"+type,handler);
            }
        }
        function removeHander(elem,type,hander){
            if(window.removeEventListener){
                elem.removeEventListener(type,hander);
            }else if(window.detachEvent){
                ele.detachEvent("on"+type,hander);
            }
        }
    })(bar,target,inWindow,callback);
}

效果:
这里写图片描述
完整例子:http://pan.baidu.com/s/1jI2UjHG

基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究(Matlab代码实现)内容概要:本文围绕“基于可靠性评估序贯蒙特卡洛模拟法的配电网可靠性评估研究”,介绍了利用Matlab代码实现配电网可靠性的仿真分析方法。重点采用序贯蒙特卡洛模拟法对配电网进行长时间段的状态抽样与统计,通过模拟系统元件的故障与修复过程,评估配电网的关键可靠性指标,如系统停电频率、停电持续时间、负荷点可靠性等。该方法能够有效处理复杂网络结构与设备时序特性,提升评估精度,适用于含分布式电源、电动汽车等新型负荷接入的现代配电网。文中提供了完整的Matlab实现代码与案例分析,便于复现和扩展应用。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及电力行业技术人员,尤其适合从事配电网规划、运行与可靠性分析相关工作的人员; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在电力系统可靠性评估中的基本原理与实现流程;②学习如何通过Matlab构建配电网仿真模型并进行状态转移模拟;③应用于含新能源接入的复杂配电网可靠性定量评估与优化设计; 阅读建议:建议结合文中提供的Matlab代码逐段调试运行,理解状态抽样、故障判断、修复逻辑及指标统计的具体实现方式,同时可扩展至不同网络结构或加入更多不确定性因素进行深化研究。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值