移動端基礎事件和交互

一:移動端基礎事件
1.touchstart 手指觸摸 == mousedown
2.touchend 手指抬起 == mouseup
3.touchmove 手指抬起 == mousmove
touch事件 在 chrome的模擬器下炮叶,部分版本 通過on的方式來添加事件無效所以在移動端一般都使用如下方式addEventListener("事件名",函數,冒泡或捕獲);

  1. 不會存在前后覆蓋問題
  2. 在chrome的模擬器下可以一直識別

//addEventListen可以同時對一個元素添加多個事件
element.addEventListener(
"touchstart",
function() {
console.log(1);
}
);
element.addEventListener(
"touchstart",
function() {
console.log(2);
}
);
//還可以定義函數,然后直接寫函數名
element.addEventListener(
"touchstart",
fn
);
function fn() {
console.log(3);
}

二:事件冒泡和捕獲
addEventListener("事件名",函數,false或true);
False 冒泡 :點擊元素 他會把這個事件一直向上傳遞 從下向上傳遞True
捕獲 :從上向下傳遞

三:阻止默認事件和阻止冒泡
e.preventDefault();//阻止默認事件
e.stopPropagation();//阻止冒泡事件

//阻止系統(tǒng)的默認事件
document.addEventListener(
"touchstart",
function(e) {
e.preventDefault();
}
);
e.preventDefault(); 阻止默認事件

阻止掉:document touchstart的默認事件,可以解決一下問題:
    1. 阻止頁面上的文字被選中    -- 可以通過阻止冒泡使某個元素上的文字被選中
    2. 阻止頁面上的系統(tǒng)菜單
    
隱患:    頁面上的所有滾動條失效  

三.事件點透
需要大家把這個代碼復制到自己編譯器上,在谷歌中打開,f12手機端進行調試.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,user-scalable=no" />
<title>無標題文檔</title>
<style>

div {

position: absolute;
left: 0;
top: 0;
width: 200px;
height: 200px;
background: rgba(204,255,0,.5);

}
</style>
<script>

//事件點透,兩個元素上的事件都沒被觸發(fā)

//阻止瀏覽器默認事件
//document.addEventListener(
// "touchmove",
// function(e) {
// e.preventDefault();//阻止默認事件
// }
//);

window.onload = function () {
var div = document.querySelector("#div");
/*
PC端鼠標事件 在移動端也可以正常使用美澳,但是注意 事件的執(zhí)行 會有300ms的延遲

    事件點透:
        1. 在移動端 PC事件 有 300ms的延遲
        2. 我們點擊了頁面之后陵究,瀏覽器會記錄點擊下去的坐標
        3. 300ms后眠饮,在該坐標找到現在在這的元素 執(zhí)行事件
    解決辦法:
        1. 阻止默認事件   (部分安卓機型不支持)
        2. 不在移動端使用鼠標事件,不用a標簽做頁面跳轉
*/
div.addEventListener(
    "touchend",
    function (e) {
    //這里不加入阻止默認事件,會發(fā)生點透事件,點div但是在百度漢字上,div消失后同時會觸發(fā)跳轉
        //你可以嘗試把這個去掉看一下效果
        e.preventDefault();
        this.style.display = "none";
    }
);

};
</script>
</head>
<body>
<a >百度</a>
<div id="div"></div>
</body>
</html>

四.防止誤觸事件

原理是:比方你對某刻元素設置了touchend事件,但是有時候我們會手指在這個元素上移動一下,沒有想要觸發(fā)這個事件,所以要進行判斷,如果用戶是移動則不觸發(fā)這個事件.

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,user-scalable=no" />
<title>無標題文檔</title>
<style>
a {
display: block;
width: 50px;
height: 50px;
background: red;
color: #fff;
margin: 20px;
}
</style>
<script>
document.addEventListener(
"touchstart",
function(e) {
e.preventDefault();
}
);
window.onload = function () {
var a = document.querySelectorAll("a");
//對每一個a標簽添加touchmove事件,
for(var i = 0; i < a.length; i++) {
a[i].addEventListener(
"touchmove",
function() {
this.isMove = true;//定義一個變量來標識用戶是否在元素上移動,
}
);

    //防止誤觸原理是,防止移動結束時觸發(fā)此事件
    
    a[i].addEventListener(
        "touchend",
        function() {
            //如果是移動就不會走if里邊的事件.
            if(!this.isMove) {
                window.location.href = this.href;
            }
            this.isMove = false;
        }
    );
}

};
</script>
</head>
<body>
<a >百度</a>
<a >百度</a>
<a >百度</a>
<a >百度</a>
<a >百度</a>
</body>
</html>

四:
tocuhEvent事件
touches 當前屏幕上的手指列表
targetTouches 當前元素上的手指列表
changedTouches 觸發(fā)當前事件的手指列表

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,user-scalable=no" />
<title>無標題文檔</title>
<style>
body {
margin: 0;
}

box {

width: 200px;
height: 200px;
background: red;
color: #fff;
font-size: 30px;

}
</style>
<script>
document.addEventListener(
"touchstart",
function(e) {
e.preventDefault();
}
);
/*
touches 當前屏幕上的手指列表
targetTouches 當前元素上的手指列表
changedTouches 觸發(fā)當前事件的手指列表
*/
window.onload = function () {
var box = document.querySelector("#box");
box.addEventListener(
"touchend",
function (e){
this.innerHTML = e.touches.length;
}
);
};
</script>
</head>
<body>
<div id="box"></div>
</body>
</html>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末铜邮,一起剝皮案震驚了整個濱河市仪召,隨后出現的幾起案子汗唱,更是在濱河造成了極大的恐慌稼锅,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件聊记,死亡現場離奇詭異秸苗,居然都是意外死亡召娜,警方通過查閱死者的電腦和手機,發(fā)現死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進店門惊楼,熙熙樓的掌柜王于貴愁眉苦臉地迎上來玖瘸,“玉大人,你說我怎么就攤上這事檀咙⊙诺梗” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵弧可,是天一觀的道長蔑匣。 經常有香客問我,道長棕诵,這世上最難降的妖魔是什么裁良? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮年鸳,結果婚禮上趴久,老公的妹妹穿的比我還像新娘。我一直安慰自己搔确,他們只是感情好彼棍,可當我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著膳算,像睡著了一般座硕。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上涕蜂,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天华匾,我揣著相機與錄音,去河邊找鬼机隙。 笑死蜘拉,一個胖子當著我的面吹牛萨西,可吹牛的內容都是我干的。 我是一名探鬼主播旭旭,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼谎脯,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了持寄?” 一聲冷哼從身側響起源梭,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎稍味,沒想到半個月后废麻,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡模庐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年烛愧,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片掂碱。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡屑彻,死狀恐怖,靈堂內的尸體忽然破棺而出顶吮,到底是詐尸還是另有隱情,我是刑警寧澤粪薛,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布悴了,位于F島的核電站,受9級特大地震影響违寿,放射性物質發(fā)生泄漏湃交。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一藤巢、第九天 我趴在偏房一處隱蔽的房頂上張望搞莺。 院中可真熱鬧,春花似錦掂咒、人聲如沸才沧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽温圆。三九已至,卻和暖如春孩革,著一層夾襖步出監(jiān)牢的瞬間岁歉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工膝蜈, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留锅移,地道東北人熔掺。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像非剃,于是被迫代替她去往敵國和親置逻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 43,472評論 2 348

推薦閱讀更多精彩內容