【金秋打卡】第十六天 拖拽
标签:
JavaScript
第一模块:
课程名称:DOM事件探秘
章节:4-1~4-3
讲师名称:Amy
第二模块:
鼠标事件都是在浏览器窗口中的特定位置上发生的。这个位置信息保存在事件的clientX和clientY属性中。 所以浏览器都支持这两个属性,它们的值表示事件发生时鼠标指针在视口中的水平和垂直坐标。不包含页面滚动的距离。任何能够跟着鼠标移动的东西 都要有一个前提:绝对定位。js封装getClass方法,获取class。实现随鼠标拖动,需要让窗口的坐标随着鼠标移动,鼠标的坐标保存在时间的clientX和clientY两个属性中。onmousedown鼠标按下 窗口和鼠标的位置同步;
element.style.left/top=clientX/Y+'px'; onmousemove当鼠标指针在元素内部移动时重复地触发
第三模块:
function getByClass(clsName,parent){
var oParent=parent?document.getElementById(parent):document,
eles=[],
elements=oParent.getElementsByTagName('*');
for(var i=0,l=elements.length;i<l;i++){
if(elements[i].className==clsName){
eles.push(elements[i]);
}
}
return eles;
}
window.οnlοad=drag;
function drag(){
var oTitle=getByClass('login_logo_webqq','loginPanel')[0];
// 拖曳
oTitle.οnmοusedοwn=fnDown;
//关闭
var oClose=document.getElementById("ui_boxyClose");
oClose.οnclick=function(){
document.getElementById("loginPanel").style.display="none";
}
//切换状态
var loginState=document.getElementById("loginState"),
stateList=document.getElementById("loginStatePanel"),
lis=stateList.getElementsByTagName("li"),
stateTxt=document.getElementById("login2qq_state_txt");
loginStateShow=document.getElementById("loginStateShow");
loginState.οnclick=function(e){
e=e||window.event;
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble=true;
}
stateList.style.display='block';
}
//鼠标滑过,离开和点击状态列表时
for(var i=0,l=lis.length;i<l;i++){
lis[i].οnmοuseοver=function(){
this.style.background='#567';
}
lis[i].οnmοuseοut=function(){
this.style.background='#fff';
}
lis[i].οnclick=function(e){
e=event||window.event;
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble=true;
}
var id = this.id;
stateList.style.display='none';
stateTxt.innerHTML=getByClass('stateSelect_text',id)[0].innerHTML;
loginStateShow.className='';
loginStateShow.className='login_state_show '+id;
}
}
document.οnclick=function(){
stateList.style.display='none';
}
}
function fnDown(event){
event = event||window.event;
var oDrag=document.getElementById('loginPanel'),
//光标按下时光标和面板之间的距离
disX=event.clientX-oDrag.offsetLeft,
disY=event.clientY-oDrag.offsetTop;
//移动
document.οnmοusemοve=function(event){
event=event||window.event;
fnMove(event,disX,disY);
}
//释放鼠标
document.οnmοuseup=function(){
document.οnmοusemοve=null;
document.οnmοuseup=null;
}
}
function fnMove(e,posX,posY){
var oDrag=document.getElementById('loginPanel'),
l=e.clientX-posX,
t=e.clientY-posY,
winW=document.documentElement.clientWidth || document.body.clientWidth,
winH=document.documentElement.clientHeight||document.body.clientHeight,
maxW=winW-oDrag.offsetWidth-10,
maxH=winH-oDrag.offsetHeight;
if(l<0){
l=0;
} else if(l>maxW){
l=maxW;
}
if(t<0){
t=10;
}else if(t>maxH){
t=maxH;
}
oDrag.style.left=l+'px';
oDrag.style.top=t+'px';
}第四模块:
点击查看更多内容
为 TA 点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
