拖拽防止火狐瀏覽器開啟新視窗
最近寫了一個簡單的拖拽效果,在谷歌瀏覽器表現毫無問題。
很多時候,總是預設為谷歌瀏覽器和火狐是最接近標準的瀏覽器,所以在火狐應該也沒問題。
但是經過測試發現,在火狐中有一個較小的缺陷,那就是拖動完成後,會彈出一個新的選項卡視窗。
看如下程式碼例項:
[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();
上面的程式碼缺一不可,否則在火狐中就有可能出現問題。
相關文章
- 瀏覽器攔截開啟新視窗情況總結瀏覽器
- 修改IE瀏覽器預設開啟視窗寬高瀏覽器
- 使用window.open開啟新視窗被瀏覽器攔截的解決方案瀏覽器
- .net火狐瀏覽器 ie瀏覽器 判斷瀏覽器
- 如何防止window.open彈窗被瀏覽器遮蔽瀏覽器
- 火狐瀏覽器禁用快取瀏覽器快取
- 禁止使用者開啟瀏覽器debug除錯視窗的方法瀏覽器除錯
- 瀏覽器的視窗位置和大小瀏覽器
- js開啟新視窗JS
- 火狐瀏覽器資訊提取工具Dumpzilla瀏覽器
- 使用C#開啟新視窗關閉舊視窗的方法;winform中防止重複開啟多個相同子窗體C#ORM
- C#防止WebBrowser在新視窗中開啟連結頁面C#Web
- 火狐瀏覽器相容模式怎麼設定在哪裡 火狐瀏覽器相容模式設定方法瀏覽器模式
- js獲取瀏覽器視窗的大小JS瀏覽器
- js獲取瀏覽器視窗屬性JS瀏覽器
- js 開啟新視窗方式JS
- 瀏覽器如何賺錢:谷歌需要火狐瀏覽器谷歌
- jQuery獲取瀏覽器視窗和文件視窗的高度程式碼jQuery瀏覽器
- 關閉瀏覽器視窗彈出警告視窗程式碼例項瀏覽器
- jqueryeasyUI dialog 彈出視窗超出瀏覽器jQueryUI瀏覽器
- Web 開發者新神器:能執行遊戲引擎的火狐 Quantum 瀏覽器Web遊戲引擎瀏覽器
- Win10系統修改火狐瀏覽器啟動頁面的方法Win10瀏覽器
- 滑鼠右鍵相容MAC版火狐瀏覽器Mac瀏覽器
- 【工具】火狐瀏覽器歷史版本下載瀏覽器
- 火狐瀏覽器開發者專版上手體驗瀏覽器
- Mozilla 正式釋出新版瀏覽器火狐 5瀏覽器
- javascript獲取瀏覽器視窗尺寸程式碼片段JavaScript瀏覽器
- selenium3 webdriver啟動火狐、chrome、edge、Safari瀏覽器的方法WebChrome瀏覽器
- python3 selenium之火狐Firefox瀏覽器載入瀏覽器配置PythonFirefox瀏覽器
- 【求助】一段JS火狐瀏覽器下正常,IE瀏覽器下不正常。JS瀏覽器
- ie瀏覽器開啟變成別的瀏覽器怎麼辦 開啟ie瀏覽器變成360怎麼改瀏覽器
- 火狐瀏覽器 11年未修復漏洞曝光瀏覽器
- Javascript開啟瀏覽器全屏模式JavaScript瀏覽器模式
- vue 新視窗開啟外連結Vue
- window.open()開啟新視窗教程
- Windows Phone 中WebBrowser開啟新視窗WindowsWeb
- Fluid Browser for Mac(多工懸浮透明視窗瀏覽器)1.6啟用版UIMac瀏覽器
- 火狐瀏覽器(69版)修改起始頁,主頁和新標籤頁瀏覽器