A. javascript中,為什麼雙擊事件之後必定會觸發兩次單擊事件
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication5
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
bool doubleclicked = true;
private void listBox1_DoubleClick(object sender, EventArgs e)
{
doubleclicked = true;
//雙擊對窗體尺寸改變,只是一個例子,你自己可以實現
this.Size = new Size(new Point(700, 700));
}
private void listBox1_Click(object sender, EventArgs e)
{
doubleclicked = false;
Thread th = new Thread(new ThreadStart(signClicked));
th.Start();
}
private void signClicked()
{
Thread.Sleep(1000);
if (!doubleclicked)
{
//todo:處理單擊事件的邏輯
AddItem();
}
}
/// <summary>
/// 代理委託
/// </summary>
private delegate void AddItemDelegate();
/// <summary>
/// 數據綁定
/// </summary>
public void AddItem()
{
if (this.InvokeRequired)
{
AddItemDelegate m_SetProgressProxy = new AddItemDelegate(AddItem);
this.Invoke(m_SetProgressProxy, new object[] { });
}
else
{
this.listBox1.Items.Add(("signClicked" + this.listBox1.Items.Count.ToString()));
}
}
}
}
給你做了個demo,基本原理是使用線程處理,定義一個外部全局變數,確定是否雙擊。這里強調一下,關鍵在於把單擊事件執行使用sleep滯後,判斷在1秒內是否有再次點擊,如果是,那麼不執行單擊事件,只執行雙擊事件。
B. javascript ie下實現div滑鼠雙擊事件
滑鼠雙擊事件其實就是 ondblclick 方法,只要給 div 加上這個方法就可以實現雙擊事內件<br><html><br><body><br><div id="d1" style="background:yellow;width:100px;height:100px" ondblclick="test()"></div><br></body><br></html><br><script><br>function test(){<br>
alert("test");<br>}<br></script>代碼如上容所示。也是通過 js 將方法直接注冊給div。<br>document.getElementById("d1").ondblclick = function(){alert("test")}
C. js可以雙擊運行
必須可以啊~雙擊單擊只是事件不同而已如果想雙擊運行就用ondblclick事件來觸發就可以了~
D. JS滑鼠事件大全 JS滑鼠事件有哪些
1、如圖首先在一個文件夾下創建index.html文件。
E. js 判斷滑鼠是單擊還是雙擊
<button onmousedown="abc();">test</button>
<script >
j=0;
function abc(){
clock=null;
j++;
if (j>=2){alert('dblclick');j=0;return 0}
clock= setTimeout(function(){if(j=1)alert("click");},150)
}
</script>
你湊活試下!多測試的話,這段代碼會出問題!
setTimeout 和setInterval偶爾還是會出問題
所以最好是避免在同一個按鈕上同時實現單擊雙擊事件!其實很多時候都沒這個必要!
如果你說的不同元素的話,onclick,ondblclick就行了!
F. 什麼用javascript讓一個對象同時監聽滑鼠單擊和滑鼠雙擊事件
<input name="test" id="test" type="button" onmouseup="c()" value="單雙擊測試"/>
注意不是onclick,是內onmouseup
var count = 0;
var timer ;
function c(){
count ++;
timer = window.setTimeout(function(){
if(count==1) alert("單擊容");
else alert("雙擊");
window.clearTimeout(timer);
count=0;
},300)
}
G. 怎樣處理JS中雙擊和單擊事件沖突問題
原則上雙擊和單擊是不可以共存的,因為兩者之間是存在邏輯沖突的,雙擊是內由兩次間隔容很短的單擊組成的,這樣的話,如果單擊和雙擊都設定了事件響應,當發生單擊時,系統並不能立刻判斷這是一個單擊事件還是一個雙擊事件的第一次單擊,這樣系統就會進入等待狀態,在經歷一段短暫的時間後如果沒有再次單擊就判定為單擊事件,否則就是雙擊。不管最終結果是什麼,都必定會對程序的運行造成影響(單擊事件會出現延遲,而且很容易造成誤判)。所以建議你不要同時設定對象的單擊和雙擊事件,用了單擊就不要再用雙擊,反之亦然,否則沖突是在所難免的!
H. JS中事件穿透深度剖析與多種解決方案
最近項目開發過程中,在ios環境下。雙擊(doubletap)上層元素(固定定位fix),偶爾會觸發下層(瀑布流中)路由跳轉。
經過部門老大指導,才了解到這個現象叫做「事件穿透」。再此俺決定研究下為什麼?
電腦上一般是滑鼠操作,即響應的是滑鼠事件,包括mousedown、mouseup、mousemove和click事件。
在一次點擊行為中,事件的觸發過程為:mousedown -> mouseup -> click 三步。
由於手機上沒有滑鼠,所以就用觸摸事件去實現類似的功能。touch事件包含touchstart、touchmove、touchend
注意手機上並沒有tap事件。 一些庫例如hamer.js、zepto.js 等等都是通過處理這些原生事件,來定義不同的手勢以及tap事件。
在一次點擊行為中,事件的觸發過程為:touchstart -> touchmove -> touchend。
有人在PC和手機上對事件做了對比實驗,以說明手機對touch事件相應速度快於mouse事件。touchstart --> mouseover(有的瀏覽器沒有實現) --> mousemove(一次) -->mousedown --> mouseup --> click -->touchend。
瀏覽器在 touchend 之後會等待約 300ms ,如果沒有 tap 行為,則觸發 click 事件。 而瀏覽器等待約 300ms 的原因是,判斷用戶是否是雙擊(double tap)行為,雙擊過程中就不適合觸發 click 事件了。 由此可以看出 click 事件觸發代表一輪觸摸事件的結束。
ps:此處偷一張圖
跟局官網描述我們可以看出:觸發路由跳轉的事件默認為 click
移動端chromiun 和 iOS 9.3+ 可以用 CSS 屬性來阻止元素的雙擊縮放進而取消點擊穿透的延遲:
首先引入庫:
調用:
將層的固定定位「降」下來,和下面的router-link都在瀑布流內。
註:此方法只適合部分項目。
由於 click 事件的滯後性,在這段時間內原來點擊的元素消失了,於是便「穿透」了。因此我們順著這個思路就想到,可以給元素的消失做一個fade效果,類似jQuery里的fadeOut,並設置動畫ration大於300ms,這樣當延遲的 click 觸發時,就不會「穿透」到下方的元素了。
同樣的道理,不用延時動畫,我們還可以動態地在觸摸位置生成一個透明的元素,這樣當上層元素消失而延遲的click來到時,它點擊到的是那個透明的元素,也不會「穿透」到底下。在一定的timeout後再將生成的透明元素移除。