全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

js实现QQ面板拖拽效果(慕课网DOM事件探秘)(全)

QQ面板拖拽,效果如图

JavaScript代码如下:

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.onload = drag;

function drag() {
  var oTitle = getByClass("login_logo_webqq", "loginPanel")[0];
  //拖页
  oTitle.onmousedown = fnDown;
  //关闭页面
  var close = document.getElementById("ui_boxyClose");
  close.onclick = winClose;
  //切换状态
  var loginState = document.getElementById("loginState");
  var stateList = document.getElementById("loginStatePanel");
  var lis = stateList.getElementsByTagName("li");
  var stateTxt = document.getElementById("login2qq_state_txt");
  var loginStateShow = document.getElementById("loginStateShow");
  //点击显示下拉单
  loginState.onclick = function (e) {
    stateList.style.display = "block";
    //阻止事件冒泡;
    e = event || window.event;
    if(e.stopPropagation){
      e.stopPropagation();
    }else{
      e.cancelBubble = true;
    }
  };
  //鼠标滑过,背景变色
  for (var i = 0; i < lis.length; i++) {
    lis[i].onmouseover = function () {
      this.style.backgroundColor = "#888";
    };
    lis[i].onmouseout = function () {
      this.style.backgroundColor = "#fff";
    };
    //鼠标点击,txt改变,图标改变
    lis[i].onclick = function (e) {
      stateList.style.display = "none";
      //阻止事件冒泡
      e = event || window.event;
      if(typeof e.stopPropagation){
        e.stopPropagation();
      }else {
        e.cancelBubble = true;
      }
      var id = this.id;
      loginStateShow.className = "login-state-show "+id;
      var text = getByClass("stateSelect_text",id)[0].innerHTML;
      stateTxt.innerHTML = text;
    }

  }
  document.onclick = function () {
    stateList.style.display = "none";
  }
}

function winClose() {
  var box = document.getElementById("loginPanel");
  box.style.display = "none";
}

function fnDown(event) {
  var event = event || window.event;
  var oDrag = document.getElementById("loginPanel");
  //光标按下时光标和面板之间的距离;
  var disX = event.clientX - oDrag.offsetLeft;
  var disY = event.clientY - oDrag.offsetTop;
  //移动
  document.onmousemove = function (event) {
    event = event || window.event;
    fnMove(event, disX, disY);
  };
  document.onmouseup = function () {
    document.onmousemove = null;
    document.onmouseup = null;
  }
}

function fnMove(event, posX, posY) {
  var oDrag = document.getElementById("loginPanel");
  var l = event.clientX - posX;
  var t = event.clientY - posY;
  var winW = document.documentElement.clientWidth;
  var winH = document.documentElement.clientHeight;
  var maxW = winW - oDrag.offsetWidth - 10;
  var maxH = winH - oDrag.offsetHeight;
  //当l=0时,窗口不能继续外移
  if (l < 0) {
    l = 0;
  } else if (l > maxW) {
    l = maxW;
  }

  if (t < 10) {
    t = 10;
  } else if (t > maxH) {
    t = maxH;
  }

  oDrag.style.left = l + "px";
  oDrag.style.top = t + "px";


}

要点: 

1.阻止事件冒泡

loginState.onclick点击事件冒泡,导致下拉列表无法点开

loginState.onclick = function () {
  stateList.style.display = "block";

}

document.onclick = function () {
    stateList.style.display = "none";

}

lis[i].onclick列表项的点击事件冒泡,导致下拉列表无法隐藏 

lis[i].onclick = function () {
  stateList.style.display = "none";

}

loginState.onclick = function () {
  stateList.style.display = "block";

}

2.鼠标事件坐标获取

function fnDown(event) {
  var event = event || window.event;
  var oDrag = document.getElementById("loginPanel");
  //光标按下时光标和面板之间的距离;
  var disX = event.clientX - oDrag.offsetLeft;
  var disY = event.clientY - oDrag.offsetTop;
  //移动
  document.onmousemove = function (event) {
    event = event || window.event;
    fnMove(event, disX, disY);
  };
  document.onmouseup = function () {
    document.onmousemove = null;
    document.onmouseup = null;
  }
}
function fnMove(event, posX, posY) {
  var oDrag = document.getElementById("loginPanel");
  var l = event.clientX - posX;
  var t = event.clientY - posY;
  var winW = document.documentElement.clientWidth;
  var winH = document.documentElement.clientHeight;
  var maxW = winW - oDrag.offsetWidth - 10;
  var maxH = winH - oDrag.offsetHeight;
  //当l=0时,窗口不能继续外移
  if (l < 0) {
    l = 0;
  } else if (l > maxW) {
    l = maxW;
  }

  if (t < 10) {
    t = 10;
  } else if (t > maxH) {
    t = maxH;
  }

  oDrag.style.left = l + "px";
  oDrag.style.top = t + "px";
}

3.封装各浏览器通用的getElementsByClassName()方法

方法返回的是一个数组,切记

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;
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# QQ面板拖拽  # js面板拖拽  # DOM事件  # Javascript DOM事件操作小结(监听鼠标点击、释放  # 悬停、离开等)  # JavaScript DOM事件(笔记)  # JavaScript call apply使用 JavaScript对象的方法绑定到DOM事件后th  # JS对象与JSON互转换、New Function()、 forEach()、DOM事件流等js开发  # 关于javascript DOM事件模型的两件事  # javascript循环变量注册dom事件 之强大的闭包  # 谈谈我对JavaScript DOM事件的理解  # 深入理解JS DOM事件机制  # 理解javascript中DOM事件  # js中DOM事件绑定分析  # JavaScript将DOM事件处理程序封装为event.js 出现的低级错误问题  # js DOM的事件常见操作实例详解  # 鼠标  # 按下  # 的是  # 如图  # 大家多多  # 滑过  # 鼠标点击  # 拖拽  # 拖页  # loginPanel  # close  # fnDown  # onmousedown  # drag  # onload  # window  # login_logo_webqq  # oTitle  # display  # li 


相关文章: 官网网站制作腾讯审核要多久,联想路由器newifi官网  如何在阿里云高效完成企业建站全流程?  如何通过可视化优化提升建站效果?  如何快速建站并高效导出源代码?  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  c++怎么用jemalloc c++替换默认内存分配器【性能】  如何登录建站主机?访问步骤全解析  宝华建站服务条款解析:五站合一功能与SEO优化设置指南  Python多线程使用规范_线程安全解析【教程】  代刷网站制作软件,别人代刷火车票靠谱吗?  网站制作公司,橙子建站是合法的吗?  如何快速生成凡客建站的专业级图册?  h5网站制作工具有哪些,h5页面制作工具有哪些?  建站之星备案流程有哪些注意事项?  SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?  网站制作培训多少钱一个月,网站优化seo培训课程有哪些?  建站之星微信建站一键生成小程序+多端营销系统  网站制作大概多少钱一个,做一个平台网站大概多少钱?  设计网站制作公司有哪些,制作网页教程?  建站之星如何快速更换网站模板?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  如何快速选择适合个人网站的云服务器配置?  平台云上自主建站:模板化设计与智能工具打造高效网站  网页设计与网站制作内容,怎样注册网站?  企业网站制作公司网页,推荐几家专业的天津网站制作公司?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  南阳网站制作公司推荐,小学电子版试卷去哪里找资源好?  湖北网站制作公司有哪些,湖北清能集团官网?  详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)  网站制作员失业,怎样查看自己网站的注册者?  佛山企业网站制作公司有哪些,沟通100网上服务官网?  建站之星下载版如何获取与安装?  网站设计制作书签怎么做,怎样将网页添加到书签/主页书签/桌面?  详解jQuery中基本的动画方法  公司网站的制作公司,企业网站制作基本流程有哪些?  成都网站制作报价公司,成都工业用气开户费用?  网页设计网站制作软件,microsoft office哪个可以创建网页?  定制建站方案优化指南:企业官网开发与建站费用解析    C++如何编写函数模板?(泛型编程入门)  ,制作一个手机app网站要多少钱?  如何确保FTP站点访问权限与数据传输安全?  个人网站制作流程图片大全,个人网站如何注销?  长春网站建设制作公司,长春的网络公司怎么样主要是能做网站的?  天津个人网站制作公司,天津网约车驾驶员从业资格证官网?  如何在IIS中配置站点IP、端口及主机头?  兔展官网 在线制作,怎样制作微信请帖?  如何用VPS主机快速搭建个人网站?  如何配置FTP站点权限与安全设置?  网站制作多少钱一个,建一个论坛网站大约需要多少钱? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。