Heim >Web-Frontend >js-Tutorial >JavaScript-DOM-Ereignisse (Notizen)_Javascript-Kenntnisse

JavaScript-DOM-Ereignisse (Notizen)_Javascript-Kenntnisse

WBOY
WBOYOriginal
2016-05-16 16:05:14982Durchsuche

Kapitel 1 Ereignisablauf

1-1. Ereignis-Bubbling: Das Ereignis wird zunächst vom spezifischsten Element empfangen (dem Knoten mit der tiefsten Verschachtelungsebene im Dokument); Fahren Sie dann Schritt für Schritt bis zum am wenigsten spezifischen Knoten (Dokument) fort;
1-2. Ereigniserfassung: Weniger spezifische Knoten sollten Ereignisse früher empfangen, während die spezifischsten Knoten Ereignisse zuletzt empfangen sollten

Kapitel 2 Event-Handler

2-1 HTML-Ereignishandler

//Nachteile: HTML- und JS-Code sind eng miteinander verbunden;



<input type="button" value="按钮" onclick="showMessage()">
2-2 DOM Level 0-Ereignishandler

//Der traditionellere Weg: Weisen Sie dem Handler-Attribut eines Ereignisses eine Funktion zu, was häufiger verwendet wird //Vorteile: Einfach/browserübergreifend;


2-3 Ereignishandler auf DOM2-Ebene
<input type="button" value="按钮" id="btn2">
<script>
  var btn2 = document.getElementById('btn2'); //取得btn2按钮对象;
  btn2.onclick = function () {        //给btn2添加onclick属性;
    alert('这是通过DOM0级添加的事件!');
  }
  btn2.onclick=null;             //删除onclick属性;
</script>
//DOM2-Level-Ereignisse definieren zwei Methoden: zur Handhabung der Vorgänge zum Festlegen und Löschen von Ereignishandlern

//addEventListener() und removeEventListner();

// Drei Parameter erhalten: zu verarbeitender Ereignisname/Ereignisverarbeitungsfunktion und boolescher Wert; //Es funktioniert nicht in IE8;




2-4 IE-Ereignishandler und browserübergreifend
<input type="button" value="按钮" id="btn3">
<script>
  var btn3 = document.getElementById('btn3');
  btn3.addEventListener('click',showMessage,false);    //添加事件程序;
  btn3.addEventListener('click',function(){        //添加多个事件程序;
    alert(this.value);
  },false);
  btn3.removeEventListener('click',showMessage,false);  //删除事件程序;
</script>
//Erhält zwei Parameter: Name der Ereignisverarbeitungsfunktion und Ereignisverarbeitungsfunktion

>2. Browserkompatibel
<script>
   var btn3 = document.getElementById('btn3');
   btn3.attachEvent('onclick',showMessage);      //添加事件;
   btn3.detachEvent('onclick',showMessage);      //删除事件;
</script>

Kapitel 3 Ereignisobjekt
//将添加和删除事件处理程序封装到对象中并赋值给变量'eventUtil';
var eventUtil = {
  //添加句柄
  addHandler:function(element,type,handler){
    //判断DOM2级事件处理程序;
    if(element.addEventListener){  
      element.addEventListener(type,handler,false);
    //判断IE浏览器;
    }else if(element.attachEvent){
      element.attachEvent("on"+type,handler);
    //使用DOM0级事件处理程序;
    }else{
      element['on'+type] = handler;
    }
  };
  //删除句柄
  removeHandler:function(element,type,handler){
    //判断DOM2级事件处理程序;
    if(element.removeEventListener){  
      element.removeEventListener(type,handler,false);
    //判断IE浏览器;
    }else if(element.detachEvent){
      element.detachEvent("on"+type,handler);
    //使用DOM0级事件处理程序;
    }else{
      element['on'+type] = null;
    };
  };
};
//跨浏览器添加事件处理程序;
eventUtil.addHandler(btn3,'click',showMessage);

3-1 Ereignisobjekte im DOM //Wenn ein Ereignis im DOM ausgelöst wird, wird ein Objekt ==Ereignis generiert;

>1.type == Ereignistyp abrufen;

>2.target == Ereignisziel abrufen;

>3.stopPropagation() == Event-Sprudeln stoppen;

>4.preventDefault() == Standardverhalten zum Verhindern von Ereignissen;




3-2 Ereignisobjekte im IE
function showMes(event){
  alert(event.type);          //onclick;点击事件;
  alert(event.target.nodeName);    //INPUT;input按钮被触发;
  event.stopPropagation();      //停止事件冒泡;
}
<a href="event.html" onclick="stopGoto();">跳转</a>
function stopGoto(event){
  event.preventDefault();       //阻止默认行为;
}
>1.type == Das Gleiche wie oben;
>2.srcElement attribute == Ereignisziel abrufen;

>3.cancleBubble-Attribut == Blasenbildung verhindern; auf true setzen, um Blasenbildung zu verhindern, auf false, um Blasenbildung nicht zu verhindern; >4.returnValue-Attribut == Standardverhalten für Blockierungsereignisse;




Kapitel 4 QQ Panel Drag-Effekt
function showMes(event){
  //非IE用event,IE8以下用window.event;
  event = event || window.event;  
  //事件目标兼容;
  var ele = event.target || event.srcElement;
  //兼容阻止事件冒泡;
  if(event.stopPropagation){
    event.stopPropagation();
  }else{
    event.cancleBubble();
  };
  //兼容取消事件默认行为;
  if(event.preventDefault){
    event.preventDefault();
  }else{
    event.returnValue = false;
  }
}
>1. Kapseln Sie die Klassenmethode

>2. Drag-and-Drop-Funktion kapseln

function getClass(clsName,parent){
  var oParent = parent&#63;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;
}

Kapitel 4 Lotteriesystem
window.onload = drag;
function drag(){
  var oTitle = getClass('login_logo_webqq','loginPanel')[0];  
  //拖拽
  oTitle.onmousedown = fnDown;
  //关闭弹窗
  var oClose = document.getElementById('ui_boxyClose');
  oClose.onclick = 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('login-state_show');
  loginState.onclick = function(e){
    //阻止冒泡到document使ul隐藏;
    e = e || window.event;
    if(e.stopPropagation){
      e.stopPropagation();
    }esle{
      e.cancleBubble = true;
    }
    stateList.style.display = "block";
  }
  //鼠标滑过/离开和点击状态列表时
  for(var i=0,i<lis.length,i++){
    lis[i].onmouseover = function(){
      this.style.background = "#567";
    }
    lis[i].onmouseout = function(){
      this.style.background = "#fff";
    }
    lis[i].onclick = function(e){
      //阻止冒泡到loginState使stateList显示;
      e = e || window.event;
      if(e.stopPropagation){
        e.stopPropagation();
      }esle{
        e.cancleBubble = true;
      }
      var id = this.id;
      stateList.style.display = "none";
      stateTxt.innerHTML = getClass('stateSelect_text',id)[0].innerHTML;
      loginStateShow.className = '';
      loginStateShow.className = 'login-state-show '+id;
    }
  }
  document.onclick = 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.onmouseover = function(event){
    event = event || window.event;
    fnMove(event,disX,disY);
  }
  //释放鼠标
 document.onmouseup = function(){
  document.onmouseover = null;
  document.onmouseup = 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,
   maxH = winH-oDrag.offsetHeight;
 if(l<0){
   l = 0;
 }else if(l>maxW){
   l = maxW;
 }
 if(t<0){
   t = 0;
 }else if(t>maxH){
   t=maxH;
 }
  oDrag.style.left = l+'px';
  oDrag.style.top = t+'px';
}
>1.Tastaturereignisse

>>1.keyDown: Wird ausgelöst, wenn der Benutzer eine beliebige Taste auf der Tastatur drückt und wenn der Benutzer die Taste gedrückt hält, wird dieses Ereignis wiederholt ausgelöst >>2.keyPress: Wird ausgelöst, wenn der Benutzer eine Zeichentaste auf der Tastatur drückt, und wenn der Benutzer sie gedrückt hält, wird dieses Ereignis wiederholt ausgelöst

>>3.keyUp: Wird ausgelöst, wenn der Benutzer eine Taste auf der Tastatur loslässt;

>2. Lotterieverfahren



Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn