javascript對點選事件和拖動事件的區分
1.專案中,為了更好的服務使用者,經常會設計一個便捷的通道,這個通道一般都是“懸浮”的。
由於是懸浮的,那麼就會考慮使用者會出現哪幾種可能的操作,一個是直接點選,另外一種就是在螢幕上先拖動幾下,然後再點選。
那麼為了完美的實現這個需求,那麼該怎麼辦呢?
最重要的就是要區分點選事件和拖動事件。
我們都知道,點選事件是被點選的物件可看做是靜止不動的,而拖動事件的物件很明顯是移動的。
那麼思路就應該是先判斷事件物件是否有移動的現象,
但是由於不管是在點選事件和拖動事件,其都有一個滑鼠按下的一個過程和一個鬆開的過程,只不過拖動事件多了一個拖動動作。
那麼完整的思路應是這樣的:
第一:先寫出滑鼠按下的函式;
第二:編寫物件是否被拖動的函式;
第三:判斷物件是否相對原先位置產生了位移;
第四:編寫滑鼠鬆開之後的程式碼;
完整程式碼如下:
var timmerHandle = null; //先設定一個定時器處理;
var isDrag = false; //宣告拖動的預設狀態是:否
//建立目標被點選(滑鼠按下)的函式
function entranceDivDown (){
console.log(“mouse down.”);
isDrag = false;
//延遲100ms
timmerHandle = setTimeout(setDragTrue,200);
}
function setDragTrue (){
isDrag = true;
}
//建立目標被拖動的函式
function entranceDivMove (){
//可以使用isDrag來判斷是移動還是拖動
var entrance = document.getElementById(“entrance”);
entrance.onmousedown = function(ev){
var oevent = ev || event;
var distanceX = oevent.clientX – entrance.offsetLeft;
var distanceY = oevent.clientY – entrance.offsetTop;
document.onmousemove = function(ev){
var oevent = ev || event;
entrance.style.left = oevent.clientX – distanceX + `px`;
entrance.style.top = oevent.clientY – distanceY + `px`;
};
document.onmouseup = function(ev){
document.onmousemove = null;
document.onmouseup = null;
};
};
}
//建立目標滑鼠釋放的函式
function entranceDivUp (){
if (!isDrag){
//先把doMouseDownTimmer清除,不然200毫秒後setGragTrue方法還是會被呼叫的
clearTimeout(timmerHandle);
console.log(“mouse up.”);
activity_id = sessionStorage.getItem(`activity_id`); //獲取活動id
var url = globalConfig.pre_api_url + “/wall/index.php?activity_id=” + activity_id; //活動路徑
window.open(url);
}else{
isDrag = false;
console.log(“draging over.”);
}
}
感謝閱讀
喜歡看小編文章的點個訂閱或者喜歡!小編每天都會跟大家分享文章,也會給大家提供web前端學習資料。
相關文章
- JS模擬滾動條(有demo和原始碼下載,支援拖動 滾輪 點選事件)JS原始碼事件
- 點選事件的委派事件
- 從點選螢幕到事件處理的事件分發原始碼流程事件原始碼
- QHeaderView的點選和雙擊事件HeaderView事件
- android 觸控(Touch)事件、點選(Click)事件的區別(詳細解析)Android事件
- Javascript中的事件物件和事件型別JavaScript事件物件型別
- RecyclerView-->點選和長按事件View事件
- databinding的點選事件事件
- Swift UITableView巢狀UICollectionView點選事件衝突(點選事件穿透)SwiftUIView巢狀事件穿透
- input事件和change事件區別事件
- javascript–BOM的onload事件和onunload事件JavaScript事件
- 禁止滑鼠點選事件事件
- JavaScript事件冒泡、事件捕獲和阻止預設事件JavaScript事件
- JavaScript 事件對記憶體和效能的影響JavaScript事件記憶體
- 移動端點透事件--阻止滾動事件事件
- javascript事件冒泡和事件捕獲型別JavaScript事件型別
- 如何使用 JavaScript 程式碼建立虛擬滑鼠點選事件JavaScript事件
- RecyclerView中item點選事件View事件
- css禁用滑鼠點選事件CSS事件
- 【FAQ】關於JavaScript版本的華為地圖服務Map的點選事件與Marker的點選事件存在衝突的解決方案JavaScript地圖事件
- jq動態生成的元素(標籤)新增點選事件事件
- Android觸控事件(續)——點選長按事件Android事件
- JS 禁用和重新啟用a標籤的點選事件JS事件
- javaScript事件(一)事件流JavaScript事件
- javaScript事件(三)事件物件JavaScript事件物件
- 我對事件驅動的理解事件
- 移動端點選事件延遲的誕生消亡史事件
- Android KeyEvent 點選事件分發處理流程(一)Android事件
- iOS全埋點解決方案-UITableView和UICollectionView點選事件iOSUIView事件
- tabbar凸起點選事件處理tabBar事件
- echarts 工具條點選事件控制Echarts事件
- MxDraw雲圖點選事件教程事件
- DataBinding中xml 點選事件XML事件
- R::shiny 點選事件-Demo事件
- focusout和blur事件的區別事件
- 3D地圖的定時高亮和點選事件3D地圖事件
- JavaScript事件JavaScript事件
- JavaScript 事件JavaScript事件