拖拽防止火狐瀏覽器開啟新視窗
最近寫了一個簡單的拖拽效果,在谷歌瀏覽器表現毫無問題。
很多時候,總是預設為谷歌瀏覽器和火狐是最接近標準的瀏覽器,所以在火狐應該也沒問題。
但是經過測試發現,在火狐中有一個較小的缺陷,那就是拖動完成後,會彈出一個新的選項卡視窗。
看如下程式碼例項:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #ant { width:350px; height:100px; padding:10px; background-color: #ccc; } </style> <script> window.onload=function(){ let ant=document.getElementById("ant"); let dr=document.getElementById("dr"); ant.ondragover=function(ev){ ev.preventDefault(); } dr.ondragstart=function(ev){ ev.dataTransfer.setData("Text",ev.target.id); } ant.ondrop=function(ev){ let data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.preventDefault(); } } </script> </head> <body> <p>按住滑鼠拖動圖片到矩形框</p> <div id="ant"></div> <br> <img id="dr" src="demo/js/img/dr.png" draggable="true"> <script> </script> </body> </html>
上述程式碼可以將底部的圖片拖入到矩形框,在谷歌中一切表現完美正常。
但是在火狐瀏覽器中,會在一個新的視窗開啟這個圖片,這通常並不是我們所需要的。
很多教程介紹說,只要使用ev.preventDefault()阻止預設動作即可阻止上述現象,很明顯上述措施並沒有達成我們的目的,也許很多教程的作者,僅僅是參考了別人的結論,並沒有親自進行驗證,下面介紹一個比較好正規的解決方式。
程式碼修改如下:
[HTML] 純文字檢視 複製程式碼執行程式碼<!DOCTYPE html> <html> <head> <meta charset=" utf-8"> <meta name="author" content="http://www.softwhy.com/" /> <title>螞蟻部落</title> <style> #ant { width:350px; height:100px; padding:10px; background-color: #ccc; } </style> <script> window.onload=function(){ let ant=document.getElementById("ant"); let dr=document.getElementById("dr"); ant.ondragover=function(ev){ ev.preventDefault(); } dr.ondragstart=function(ev){ ev.dataTransfer.setData("Text",ev.target.id); } ant.ondrop=function(ev){ let data=ev.dataTransfer.getData("Text"); ev.target.appendChild(document.getElementById(data)); ev.stopPropagation() ev.preventDefault(); } } </script> </head> <body> <p>按住滑鼠拖動圖片到矩形框</p> <div id="ant"></div> <br> <img id="dr" src="demo/js/img/dr.png" draggable="true"> <script> </script> </body> </html>
不但需要加上ev.preventDefault()阻止預設動作的發生,還需要阻止事件冒泡。
核心程式碼片段你如下:
[JavaScript] 純文字檢視 複製程式碼ev.stopPropagation() ev.preventDefault();
上面的程式碼缺一不可,否則在火狐中就有可能出現問題。
相關文章
- 瀏覽器攔截開啟新視窗情況總結瀏覽器
- 使用window.open開啟新視窗被瀏覽器攔截的解決方案瀏覽器
- 火狐瀏覽器禁用快取瀏覽器快取
- 禁止使用者開啟瀏覽器debug除錯視窗的方法瀏覽器除錯
- 火狐瀏覽器相容模式怎麼設定在哪裡 火狐瀏覽器相容模式設定方法瀏覽器模式
- 瀏覽器的視窗位置和大小瀏覽器
- 火狐瀏覽器如何設定主頁為新標籤頁瀏覽器
- Web 開發者新神器:能執行遊戲引擎的火狐 Quantum 瀏覽器Web遊戲引擎瀏覽器
- 滑鼠右鍵相容MAC版火狐瀏覽器Mac瀏覽器
- 【工具】火狐瀏覽器歷史版本下載瀏覽器
- Win10系統修改火狐瀏覽器啟動頁面的方法Win10瀏覽器
- selenium3 webdriver啟動火狐、chrome、edge、Safari瀏覽器的方法WebChrome瀏覽器
- js 開啟新視窗方式JS
- 瀏覽器開啟JupyterLab後所有快捷鍵與視窗按鍵均失效怎麼辦?瀏覽器
- 瀏覽器開啟md文件瀏覽器
- 火狐瀏覽器 11年未修復漏洞曝光瀏覽器
- Fluid Browser for Mac(多工懸浮透明視窗瀏覽器)1.6啟用版UIMac瀏覽器
- 使用chrome瀏覽器驅動自動開啟瀏覽器Chrome瀏覽器
- 谷歌 Chrome 開發者“揭祕”瀏覽器視窗遮擋問題:啟動速度提升25.8%!谷歌Chrome瀏覽器
- Firefox Quantum for Mac(火狐瀏覽器) v85.0b6開發版FirefoxMac瀏覽器
- [BUG反饋]IE瀏覽器,百度瀏覽器,搜狗瀏覽器批量操作功能都不相容!!!!傲遊、火狐、谷歌瀏覽器可以瀏覽器谷歌
- 火狐瀏覽器(69版)修改起始頁,主頁和新標籤頁瀏覽器
- ie瀏覽器開啟變成別的瀏覽器怎麼辦 開啟ie瀏覽器變成360怎麼改瀏覽器
- 為什麼谷歌瀏覽器開啟是2345瀏覽器 谷歌瀏覽器一開啟是2345介面怎麼辦谷歌瀏覽器
- vue 新視窗開啟外連結Vue
- window.open()開啟新視窗教程
- 火狐 和 谷歌Google Chrome 核心瀏覽器 跨域問題谷歌GoChrome瀏覽器跨域
- 【瀏覽器開啟匯出的excel】瀏覽器Excel
- Centos下火狐瀏覽器無法播放視訊,那就安裝一個Adobe flash playerCentOS瀏覽器
- python用selenium開啟瀏覽器後瀏覽器關閉---解決辦法Python瀏覽器
- 替代Edge瀏覽器?微軟開發新的瀏覽器:採用Chrome核心瀏覽器微軟Chrome
- 瀏覽器開發者工具開啟檢測瀏覽器
- 火狐瀏覽器Win 10 ARM版首個Nightly版本釋出瀏覽器
- Win10系統下火狐瀏覽器怎麼禁用javascriptWin10瀏覽器JavaScript
- Firefox for Mac(火狐瀏覽器)v84.0b8官方版FirefoxMac瀏覽器
- 瀏覽器跨 Tab 視窗通訊原理及應用實踐瀏覽器
- 瀏覽器檢視Session瀏覽器Session
- chrome開啟瀏覽器的python指令碼Chrome瀏覽器Python指令碼