最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

js實(shí)現(xiàn)QQ面板拖拽效果(慕課網(wǎng)DOM事件探秘)(全)

 更新時(shí)間:2017年09月19日 09:04:32   作者:喵嘻嘻  
這篇文章主要為大家詳細(xì)介紹了QQ面板拖拽效果,探秘慕課網(wǎng)DOM事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

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];
  //拖頁(yè)
  oTitle.onmousedown = fnDown;
  //關(guān)閉頁(yè)面
  var close = document.getElementById("ui_boxyClose");
  close.onclick = winClose;
  //切換狀態(tài)
  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");
  //點(diǎn)擊顯示下拉單
  loginState.onclick = function (e) {
    stateList.style.display = "block";
    //阻止事件冒泡;
    e = event || window.event;
    if(e.stopPropagation){
      e.stopPropagation();
    }else{
      e.cancelBubble = true;
    }
  };
  //鼠標(biāo)滑過(guò),背景變色
  for (var i = 0; i < lis.length; i++) {
    lis[i].onmouseover = function () {
      this.style.backgroundColor = "#888";
    };
    lis[i].onmouseout = function () {
      this.style.backgroundColor = "#fff";
    };
    //鼠標(biāo)點(diǎn)擊,txt改變,圖標(biāo)改變
    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");
  //光標(biāo)按下時(shí)光標(biāo)和面板之間的距離;
  var disX = event.clientX - oDrag.offsetLeft;
  var disY = event.clientY - oDrag.offsetTop;
  //移動(dòng)
  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;
  //當(dāng)l=0時(shí),窗口不能繼續(xù)外移
  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";


}

要點(diǎn): 

1.阻止事件冒泡

loginState.onclick點(diǎn)擊事件冒泡,導(dǎo)致下拉列表無(wú)法點(diǎn)開(kāi)

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

}

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

}

lis[i].onclick列表項(xiàng)的點(diǎn)擊事件冒泡,導(dǎo)致下拉列表無(wú)法隱藏 

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

}

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

}

2.鼠標(biāo)事件坐標(biāo)獲取

function fnDown(event) {
  var event = event || window.event;
  var oDrag = document.getElementById("loginPanel");
  //光標(biāo)按下時(shí)光標(biāo)和面板之間的距離;
  var disX = event.clientX - oDrag.offsetLeft;
  var disY = event.clientY - oDrag.offsetTop;
  //移動(dòng)
  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;
  //當(dāng)l=0時(shí),窗口不能繼續(xù)外移
  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()方法

方法返回的是一個(gè)數(shù)組,切記

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

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • JavaScript使用pop方法移除數(shù)組最后一個(gè)元素用法實(shí)例

    JavaScript使用pop方法移除數(shù)組最后一個(gè)元素用法實(shí)例

    這篇文章主要介紹了JavaScript使用pop方法移除數(shù)組最后一個(gè)元素,實(shí)例分析了javascript中pop方法的使用技巧,需要的朋友可以參考下
    2015-04-04
  • Javascript學(xué)習(xí)之談?wù)凧S的全局變量跟局部變量(推薦)

    Javascript學(xué)習(xí)之談?wù)凧S的全局變量跟局部變量(推薦)

    這篇文章主要介紹了Javascript學(xué)習(xí)之談?wù)凧S的全局變量跟局部變量雖然腳本之家小編以前發(fā)過(guò),但還是這篇文章整理的比較好,需要的朋友可以參考一下
    2016-08-08
  • Javascript Ajax異步讀取RSS文檔具體實(shí)現(xiàn)

    Javascript Ajax異步讀取RSS文檔具體實(shí)現(xiàn)

    這篇文章主要介紹了Javascript Ajax異步讀取RSS文檔具體實(shí)現(xiàn),有需要的朋友可以參考一下
    2013-12-12
  • 用js傳遞value默認(rèn)值的示例代碼

    用js傳遞value默認(rèn)值的示例代碼

    這篇文章主要介紹了用js傳遞value默認(rèn)值的簡(jiǎn)單實(shí)現(xiàn),很簡(jiǎn)單但比較實(shí)用,需要的朋友可以參考下
    2014-09-09
  • JavaScript制作簡(jiǎn)單分頁(yè)插件

    JavaScript制作簡(jiǎn)單分頁(yè)插件

    本文給大家分享的是JavaScript制作的一個(gè)兼容IE6+以及主流瀏覽器的分頁(yè)插件,非常的不錯(cuò),有需要的小伙伴可以參考下
    2016-09-09
  • JavaScript函數(shù)的使用教程

    JavaScript函數(shù)的使用教程

    這篇文章主要介紹了JavaScript函數(shù)的使用教程,JavaScript函數(shù)是被設(shè)計(jì)為執(zhí)行特定任務(wù)的代碼塊。JavaScript函數(shù)會(huì)在某代碼調(diào)用它時(shí)被執(zhí)行。文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • JS基于onclick事件實(shí)現(xiàn)單個(gè)按鈕的編輯與保存功能示例

    JS基于onclick事件實(shí)現(xiàn)單個(gè)按鈕的編輯與保存功能示例

    這篇文章主要介紹了JS基于onclick事件實(shí)現(xiàn)單個(gè)按鈕的編輯與保存功能,結(jié)合實(shí)例形式分析了JS實(shí)現(xiàn)onclick響應(yīng)事件的轉(zhuǎn)換相關(guān)操作技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2017-02-02
  • JavaScript模板引擎原理與用法詳解

    JavaScript模板引擎原理與用法詳解

    這篇文章主要介紹了JavaScript模板引擎原理與用法,結(jié)合實(shí)例形式詳細(xì)分析了javascript模版引擎相關(guān)概念、原理、定義及使用方法,需要的朋友可以參考下
    2018-12-12
  • 信息頁(yè)文內(nèi)畫(huà)中畫(huà)廣告js實(shí)現(xiàn)代碼(文中加載廣告方式)

    信息頁(yè)文內(nèi)畫(huà)中畫(huà)廣告js實(shí)現(xiàn)代碼(文中加載廣告方式)

    一般來(lái)說(shuō)文章內(nèi)容中的廣告點(diǎn)擊率更好,也更容易被訪(fǎng)客看到,如果直接將廣告放到頁(yè)面頭部會(huì)影響網(wǎng)站的速度,所以一般都比較喜歡這種方法,這里分享下實(shí)現(xiàn)方法
    2016-01-01
  • bootstrap輸入框組代碼分享

    bootstrap輸入框組代碼分享

    Bootstrap 支持的另一個(gè)特性,輸入框組,輸入框組擴(kuò)展自表單控件.下面小編給大家介紹bootstrap輸入框組的代碼,非常不錯(cuò)具有參考借鑒價(jià)值,感興趣的朋友一起學(xué)習(xí)吧
    2016-06-06

最新評(píng)論

长沙县| 章丘市| 延吉市| 上饶市| 彭泽县| 泰安市| 辽宁省| 永德县| 盐津县| 德江县| 阳春市| 晋江市| 赞皇县| 黑水县| 平度市| 灯塔市| 房山区| 天峻县| 灵宝市| 彭阳县| 镇赉县| 梁平县| 新泰市| 马公市| 福建省| 浪卡子县| 青海省| 宁陵县| 温宿县| 盖州市| 谷城县| 黄陵县| 扎赉特旗| 延安市| 西青区| 扬州市| 绍兴县| 兰州市| 古田县| 赤水市| 赫章县|