DOM模型(七)—— 事件类型

  ​依据澳大华雷斯联邦(Commonwealth of Australia)传播媒介二7日最新报纸发表,布鲁塞尔西南边壹处住所产生枪击事件,形成几人病逝,一人受伤。近期公安部一度到达现场,但事件原委未知。(央视记者王聪)

原生js–事件类型

 

一、表单事件:

submit事件

reset事件

click事件

change事件

focus事件(不冒泡) (IE和ES5支撑冒泡的focusin)

blur事件(不冒泡) (IE和ES伍协助冒泡的focusout)

input事件(ES五 textinput提供更便宜的收获输入文字的方案)

 

2、Window事件

load事件

DOMContentLoaded事件

readyStatechage事件

unload事件

beforeunload事件

resize事件

scroll事件

 

3、鼠标事件

click事件

dbclick事件

mouseover事件(冒泡)

mouseout事件(冒泡)

mousedown事件

mouseup事件

contextmenu事件

mouseenter事件(不冒泡)

mouseleave事件(不冒泡)

mousewheel事件(FF DOMMouseScroll事件、DOM3 wheel事件)

 

肆、键盘事件

keydown事件

keyup事件

keypress事件

本节介绍种种大规模的浏览器事件。

基础知识:

一.本篇小说就不分析晦涩难懂的源码了(加上源码后小说内容太长,提出有耐心的读者本身查看源码来注脚文章的解析结果)。在这里通过简单的代码间接打字与印刷日志让您清晰的认识Button的OnTouch事件传递机制(和onClick,onLongClick事件时有发生先后顺序)。
贰.在onTouch事件中:down事件再次回到值标志此番事件是还是不是为点击事件(重返false,是点击事件;重返true,不记为点击事件),而up事件标志此番事件停止时间,也正是判别是或不是为长按。

一、鼠标事件


鼠标事件指与鼠标相关的风云,首要有以下一些。

一 . onTouch返回false

一.先是是onTouch事件的down事件时有爆发,此时,假诺长按,触发onLongClick事件;
2.然后是onTouch事件的up事件时有发生,up达成,最终触发onClick事件。

日志:

图片 1

不长按.png

图片 2

长按.png

1.1、click事件,dblclick事件

当用户在Element节点,document节点,window对象上单击鼠标(或按下回车键)时,click事件触发。

“鼠标单击”定义为,用户在同等职位实现二回mousedown动作和mouseup动作。它们的触发顺序是:mousedown率先触及,mouseup随之触发,click最后触发。

下边是一个安装click事件监听函数的例子。

div.addEventListener("click", function( event ) {
  // 显示在该节点,鼠标连续点击的次数
  event.target.innerHTML = "click count: " + event.detail;
}, false);

dblclick事件当用户在element、document、window对象上,双击鼠标时触发。该事件在mousedownmouseupclick尔后触发。

二 . onTouch返回true

1.先是是onTouch事件的down事件产生,然后是onTouch事件的up事件爆发;
2.以内不触发onClick和onLongClick事件

日志:

图片 3

不长按.png

图片 4

长按.png

1.2、mouseup事件,mousedown事件,mousemove事件

mousedown事件在按下鼠标键时接触。
mouseup事件在刑释按下的鼠标键时触发。
mousemove事件当鼠标在2个节点内部移动时接触。当鼠标持续运动时,该事件会接二连三触发。为了幸免品质难点,提出对该事件的监听函数做一些限制,比方限制一段时间内只可以运转贰回代码。

3 . onTouch:down再次回到true,up重返false:结果同2

一.率先是onTouch事件的down事件时有发生,然后是onTouch事件的up事件发生;
贰.里面不触发onClick和onLongClick事件

日志:

图片 5

不长按.png

图片 6

长按.png

机制分析:

  1. onTouch事件中:down事件再次回到值标识本次事件是还是不是为点击事件(重临false,是点击事件;再次来到true,不记为点击事件),

  2. 而up事件标志此番风云截至时间,也便是剖断是或不是为长按。

3.假诺当down重临true时候,系统将不把此番事件记录为点击事件,也就不会触发onClick也许onLongClick事件了。

四.因而就算当up的时候回来false,系统也不会继续触发onClick事件了。

1.3、mouseover事件,mouseenter事件

mouseover事件和mouseenter事件,都以鼠标进入二个节点时接触。

贰者的分歧是,mouseenter事件只触发三次,而只要鼠标在节点内部移动,mouseover事件会在子节点上接触多次。

// HTML代码为
// <ul id="test">
//   <li>item 1</li>
//   <li>item 2</li>
//   <li>item 3</li>
// </ul>

var test = document.getElementById('test');

// 进入test节点以后,该事件只会触发一次
// event.target 是 ul 节点
test.addEventListener('mouseenter', function (event) {
  event.target.style.color = 'purple';
  setTimeout(function () {
    event.target.style.color = '';
  }, 500);
}, false);

// 进入test节点以后,只要在子Element节点上移动,该事件会触发多次
// event.target 是 li 节点
test.addEventListener('mouseover', function (event) {
  event.target.style.color = 'orange';
  setTimeout(function () {
    event.target.style.color = '';
  }, 500);
}, false);

四 . onTouch:down返回false,up返回true:

一.先是是onTouch事件的down事件发生,此时:
二.长按,触发onLongClick事件,然后是onTouch事件的up事件发生,落成。
三.短按,先触发onTouch的up事件, 到早晚时间后,自动触发onLongClick事件。

日志:

图片 7

不长按.png

图片 8

长按.png

建制分析:

  1. onTouch事件中:down事件重回值标志这次风云是或不是为点击事件(重临false,是点击事件;重返true,不记为点击事件),

  2. 而up事件标志本次事件结束时间,也等于推断是或不是为长按。

3.只要当down重返true时候,系统将把本次事件记录为点击事件,而up再次回到了true,表示一直未曾落成,向来长按中,也就不会触发onClick事件了。

源代码:

package com.example.h.myapplication;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity {

    private final String  TAG = MainActivity.class.getSimpleName();
    private Button bntTest1,bntTest2,bntTest3,bntTest4;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        bntTest1 = (Button) findViewById(R.id.bnt_test1);
        bntTest2 = (Button) findViewById(R.id.bnt_test2);
        bntTest3 = (Button) findViewById(R.id.bnt_test3);
        bntTest4 = (Button) findViewById(R.id.bnt_test4);

        bntTest1.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TAG,"--bntTest1--onOnLongClick()触发----");
                return false;
            }
        });
        bntTest1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG,"--bntTest1---onClick()触发----");
            }
        });
        bntTest1.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
               // Log.e(TAG,"--bntTest1---MotionEvent触发----"+event.getAction());
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.e(TAG,"--bntTest1---MotionEvent.ACTION_DOWN:触发----");
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.e(TAG,"--bntTest1---MotionEvent.ACTION_UP:触发----");
                        break;
                }
                return false;
            }
        });


        bntTest2.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TAG,"--bntTest2--onOnLongClick()触发----");
                return false;
            }
        });
        bntTest2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG,"--bntTest2---onClick()触发----");
            }
        });
        bntTest2.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.e(TAG,"--bntTest2---MotionEvent.ACTION_DOWN:触发----");
                        break;
                    case MotionEvent.ACTION_UP:
                        Log.e(TAG,"--bntTest2---MotionEvent.ACTION_UP:触发----");
                        break;
                }
                return true;
            }
        });

        bntTest3.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TAG,"--bntTest3--onOnLongClick()触发----");
                return false;
            }
        });
        bntTest3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG,"--bntTest3---onClick()触发----");
            }
        });
        bntTest3.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.e(TAG,"--bntTest3---MotionEvent.ACTION_DOWN:触发----");
                        return true;
                    case MotionEvent.ACTION_UP:
                        Log.e(TAG,"--bntTest3---MotionEvent.ACTION_UP:触发----");
                       return false;
                }
                return false;
            }

        });

        bntTest4.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                Log.e(TAG,"--bntTest4--onOnLongClick()触发----");
                return false;
            }
        });
        bntTest4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.e(TAG,"--bntTest4---onClick()触发----");
            }
        });
        bntTest4.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getAction()){
                    case MotionEvent.ACTION_DOWN:
                        Log.e(TAG,"--bntTest4---MotionEvent.ACTION_DOWN:触发----");
                      return false;
                    case MotionEvent.ACTION_UP:
                        Log.e(TAG,"--bntTest4---MotionEvent.ACTION_UP:触发----");
                       return true;
                }
                return false;
            }
        });
    }
}

1.4、mouseout事件,mouseleave事件

mouseout事件和mouseleave事件,都以鼠标离开二个节点时接触。

两者的界别是,mouseout事件会冒泡,mouseleave事件不会。子节点的mouseout事件会冒泡到父节点,进而触发父节点的mouseout事件。mouseleave事件就从不那种功用,所以离开子节点时,不会触发父节点的监听函数。

结语

本篇小说分析了Android事件分发机制之Button的OnTouch事件,为了便于读者知道,只需求牢记down事件再次回到值标识本次事件是还是不是为点击事件(重返false,是点击事件;重返true,不记为点击事件),而up事件标志本次事件截至时间这么些关键点就好了。

1.5、contextmenu事件

contextmenu事件在三个节点上点击鼠标右键时接触,大概按下“上下文菜单”键时触发。

品类地址

https://github.com/ruanjiankeji/ButtonEventAnalysis

如有不足,迎接小伙伴指正,相互学习;假若感觉还足以,招待小说star或许github上star、follow

网站地图xml地图