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
相关文章:
制作网站公司那家好,网络公司是做什么的?
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
淘宝制作网站有哪些,淘宝网官网主页?
宝塔建站助手安装配置与建站模板使用全流程解析
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
高防服务器租用首荐平台,企业级优惠套餐快速部署
php8.4新语法match怎么用_php8.4match表达式替代switch【方法】
如何通过西部建站助手安装IIS服务器?
网站制作网站,深圳做网站哪家比较好?
如何在香港服务器上快速搭建免备案网站?
如何用免费手机建站系统零基础打造专业网站?
建站10G流量真的够用吗?如何应对访问高峰?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
如何通过万网虚拟主机快速搭建网站?
广州美橙建站如何快速搭建多端合一网站?
建站之星伪静态规则如何设置?
装修招标网站设计制作流程,装修招标流程?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
建站之星官网登录失败?如何快速解决?
建站之星安装模板失败:服务器环境不兼容?
如何选择适配移动端的WAP自助建站平台?
如何快速搭建二级域名独立网站?
浙江网站制作公司有哪些,浙江栢塑信息技术有限公司定制网站做的怎么样?
如何通过老薛主机一键快速建站?
开心动漫网站制作软件下载,十分开心动画为何停播?
移动端手机网站制作软件,掌上时代,移动端网站的谷歌SEO该如何做?
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站之星与建站宝盒如何选择最佳方案?
Android滚轮选择时间控件使用详解
建站主机如何选?高性价比方案全解析
C++如何编写函数模板?(泛型编程入门)
C#如何在一个XML文件中查找并替换文本内容
详解一款开源免费的.NET文档操作组件DocX(.NET组件介绍之一)
建站之星代理如何优化在线客服效率?
建站之星五站合一营销型网站搭建攻略,流量入口全覆盖优化指南
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
贸易公司网站制作流程,出口贸易网站设计怎么做?
音乐网站服务器如何优化API响应速度?
营销式网站制作方案,销售哪个网站招聘效果最好?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
在线ppt制作网站有哪些,请推荐几个好的课件下载的网站?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
如何在万网开始建站?分步指南解析
建站主机类型有哪些?如何正确选型
Android自定义控件实现温度旋转按钮效果
如何选择高效响应式自助建站源码系统?
seo网站制作优化,网站SEO优化步骤有哪些?
如何在建站宝盒中设置产品搜索功能?
如何通过虚拟机搭建网站?详细步骤解析
*请认真填写需求信息,我们会在24小时内与您取得联系。