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
相关文章:
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
专业的网站制作设计是什么,如何制作一个企业网站,建设网站的基本步骤有哪些?
再谈Python中的字符串与字符编码(推荐)
网站制作壁纸教程视频,电脑壁纸网站?
微信小程序 五星评分(包括半颗星评分)实例代码
网站制作需要会哪些技术,建立一个网站要花费多少?
猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?
公司网站制作价格怎么算,公司办个官网需要多少钱?
企业微网站怎么做,公司网站和公众号有什么区别?
制作旅游网站html,怎样注册旅游网站?
javascript基本数据类型及类型检测常用方法小结
Avalonia如何实现跨窗口通信 Avalonia窗口间数据传递
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
如何快速搭建FTP站点实现文件共享?
网站制作企业,网站的banner和导航栏是指什么?
陕西网站制作公司有哪些,陕西凌云电器有限公司官网?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】
济南企业网站制作公司,济南社保单位网上缴费步骤?
常州企业网站制作公司,全国继续教育网怎么登录?
建站IDE高效指南:快速搭建+SEO优化+自适应模板全解析
制作国外网站的软件,国外有哪些比较优质的网站推荐?
专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
如何选择网络建站服务器?高效建站必看指南
,有什么在线背英语单词效率比较高的网站?
定制建站如何定义?其核心优势是什么?
建站之星微信建站一键生成小程序+多端营销系统
建站VPS能否同时实现高效与安全翻墙?
如何通过PHP快速构建高效问答网站功能?
宝塔面板创建网站无法访问?如何快速排查修复?
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
如何快速生成高效建站系统源代码?
智能起名网站制作软件有哪些,制作logo的软件?
大连网站制作费用,大连新青年网站,五年四班里的视频怎样下载啊?
如何制作一个表白网站视频,关于勇敢表白的小标题?
怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?
移民网站制作流程,怎么看加拿大移民官网?
建站之星2.7模板:企业网站建设与h5定制设计专题
零基础网站服务器架设实战:轻量应用与域名解析配置指南
如何在阿里云通过域名搭建网站?
济南专业网站制作公司,济南信息工程学校怎么样?
如何通过虚拟主机快速完成网站搭建?
小型网站制作HTML,*游戏网站怎么搭建?
如何通过商城免费建站系统源码自定义网站主题?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
如何基于云服务器快速搭建网站及云盘系统?
建站之星云端配置指南:模板选择与SEO优化一键生成
如何通过山东自助建站平台快速注册域名?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
*请认真填写需求信息,我们会在24小时内与您取得联系。