新人学习JS,求解析一下下面的代码,

无聊看风景 2014-12-21 11:42:49
本人刚刚学习javascript,发现js的变量 对象之间的赋值搞不清,和以前学习的java有点不习惯,
下面是一个
动态拖动div的代码,希望给小弟注释一下代码,谢谢
function $(_sId){return document.getElementById(_sId);}

function moveStart (event, _sId){
var oObj = $(_sId);
oObj.onmousemove = mousemove;

oObj.onmouseup = mouseup;
oObj.setCapture ? oObj.setCapture() : function(){};
oEvent = window.event ? window.event : event;
var dragData = {x : oEvent.clientX, y : oEvent.clientY};
var backData = {x : parseInt(oObj.style.top), y : parseInt(oObj.style.left)};

function mousemove(){ //鼠标移动时的方法
var oEvent = window.event ? window.event : event;

var iLeft = oEvent.clientX - dragData["x"] + parseInt(oObj.style.left);
var iTop = oEvent.clientY - dragData["y"] + parseInt(oObj.style.top);
oObj.style.left = iLeft;
oObj.style.top = iTop;
dragData = {x: oEvent.clientX, y: oEvent.clientY};
}

function mouseup(){ //放开鼠标键时的方法
var oEvent = window.event ? window.event : event;

oObj.onmousemove = null;
oObj.onmouseup = null;
if(oEvent.clientX < 1 || oEvent.clientY < 1 || oEvent.clientX > document.body.clientWidth || oEvent.clientY > document.body.clientHeight){
oObj.style.left = backData.y;
oObj.style.top = backData.x;
}
oObj.releaseCapture ? oObj.releaseCapture() : function(){};
}
}
...全文
200 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ikscher 2014-12-23
  • 打赏
  • 举报
回复
初学看这种代码不是找事吗,怎么没有mousedown
无聊看风景 2014-12-21
  • 打赏
  • 举报
回复
这个代码是不是仅能动态拖动div呢?别的就不行?
MnZlZ 2014-12-21
  • 打赏
  • 举报
回复

//$(_sld)函数用来生成id名为sld的html标签对象,参数可以是任何的html标签
function $(_sId){return document.getElementById(_sId);}
 
function moveStart (event, _sId){ //连个参数,event 是方法的事件参数,_sld是html标签的id
   var oObj = $(_sId); //调用函数$(_sld),并把html object对象引用给oObj;
                                     //相当于: var oObj=document.getElementById('_sld');
   oObj.onmousemove = mousemove; //给oObj添加鼠标移动事件,当鼠标移动时调用函数 mousemove();
 
   oObj.onmouseup = mouseup; //给oObj添加鼠标抬起事件,当鼠标抬起时调用函数 mouseup();
   oObj.setCapture ? oObj.setCapture() : function(){}; //这里做一个鼠标捕获
   oEvent = window.event ? window.event : event;  //给oEvent引用一个方法的事件
   var dragData = {x : oEvent.clientX, y : oEvent.clientY}; //数组,获得鼠标点击的x,y坐标
   var backData = {x : parseInt(oObj.style.top), y : parseInt(oObj.style.left)}; 通过函数处理得到oObj对象的x,y坐标
    
  //mousemove()方法就是在鼠标移动的同时,获得鼠标的x,y坐标,然后赋值给oObj对象
   function mousemove(){ //鼠标移动时的方法
    var oEvent = window.event ? window.event : event;
 
    var iLeft = oEvent.clientX - dragData["x"] + parseInt(oObj.style.left);
    var iTop = oEvent.clientY - dragData["y"] + parseInt(oObj.style.top);
    oObj.style.left = iLeft;
    oObj.style.top = iTop;
    dragData = {x: oEvent.clientX, y: oEvent.clientY}; 
   }
    
   function mouseup(){ //放开鼠标键时的方法
    var oEvent = window.event ? window.event : event;
     
    oObj.onmousemove = null; //停止函数调用
    oObj.onmouseup = null;//停止函数调用
    if(oEvent.clientX < 1 || oEvent.clientY < 1 || oEvent.clientX > document.body.clientWidth || oEvent.clientY > document.body.clientHeight){
     oObj.style.left = backData.y;
     oObj.style.top = backData.x;
    }
    oObj.releaseCapture ? oObj.releaseCapture() : function(){};
   }
}
《jquery技术内幕:深入解析jquery架构设计与实现原理》由阿里巴巴资深前端开发工程师撰写,从源代码角度全面而系统地解读了jquery的17个模块的架构设计理念和内部实现原理,旨在帮助读者参透jquery中的实现技巧和技术精髓,同时本书也对广大开发者如何通过阅读源代码来提升编码能力和软件架构能力提供了指导。   《jquery技术内幕:深入解析jquery架构设计与实现原理》首先通过“总体架构”梳理了各个模块的分类、功能和依赖关系,让大家对jquery的工作原理有大致的印象;进而通过“构造jquery对象”章节分析了构造函数jquery()的各种用法和内部构造过程;接着详细分析了底层支持模块的源码实现,包括:选择器sizzle、异步队列deferred、数据缓存data、队列queue、浏览器功能测试support;最后详细分析了功能模块的源码实现,包括:属性操作attributes、事件系统events、dom遍历traversing、dom操作manipulation、样式操作css、异步请ajax、动画effects。   《jquery技术内幕:深入解析jquery架构设计与实现原理》在分析每个模块时均采用由浅入深的方式,先概述功能、用法、结构和实现原理,然后介绍关键步骤和分析源码实现。让读者不仅知其然,而且知其所以然。事实上,本书的根本价值在于传达一种通过阅读源码快速成长的方式。无论是前端新人,还是经验丰富的老手,只要是对javascript感兴趣的开发人员,都会从本书中受益。

87,910

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧