日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
如何讓用戶選擇是否離開當前頁面?

為什么要讓用戶選擇是否離開頁面

成都創(chuàng)新互聯(lián)公司主要從事網(wǎng)站設計制作、網(wǎng)站制作、網(wǎng)頁設計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務。立足成都服務肅州,10余年網(wǎng)站建設經(jīng)驗,價格優(yōu)惠、服務專業(yè),歡迎來電咨詢建站服務:18980820575

  •  如果用戶填寫了很多數(shù)據(jù)此時
  •  不小心點了其他a標簽或者關閉了瀏覽器,不做判斷,那么用戶數(shù)據(jù)直接丟了

梳理需求

  •  離開頁面方式,被location.href,a標簽,關閉瀏覽器或者當前tab頁等...
  •  需要判斷數(shù)據(jù)是否跟初始化時一致(用戶有無填寫表單...)
  •  用戶選擇離開就要繼續(xù)邏輯,反之則不離開

正式開始

  •     首先要知道一個事件:onbeforeunload,MDN的說明是:當瀏覽器窗口關閉或者刷新時,會觸發(fā)beforeunload事件。當前頁面不會直接關閉,可以點擊確定按鈕關閉或刷新,也可以取消關閉或刷新。
  •    HTML規(guī)范指出在此事件中調(diào)用window.alert(),window.confirm()以及window.prompt()方法,可能會失效

實踐一下

  •  在微信公眾號編輯器界面,輸入一部分內(nèi)容后,點擊關閉tab頁,此時出現(xiàn)彈窗   

  • 刪除所有內(nèi)容后,回歸初始進入的數(shù)據(jù),點擊關閉tab頁,直接就關閉了,沒有出現(xiàn)提示   

  • 看插件顯示,這個編輯器界面沒有使用react和vue,應該是jq吧,測試下控制臺,對的,一猜就中(小編太了,不點個關注?)

回到項目中,加入beforeunload事件

  •  HTML文件中加入script標簽 
 
 
 
 
  1.  
  •     點擊關閉,或者此時輸入window.location.href= "xxx.ooo.com"會出現(xiàn)

  •  那么問題來了,如果我通過a標簽跳轉呢?

通過a標簽跳轉(+前端路由)

  •  我使用的是dva/router,引入相關組件 
 
 
 
 
  1. import { Prompt } from 'dva/router';  
  2. ....  
  3. render(){  
  4.   return   
  •  引入Prompt組件,并且傳入message是一個方法,看看這個方法   
 
 
 
 
  1. public handlePrompt = (location: Location) => {  
  2.        return false;  
  3.    }; 
  •  那么此時我們使用dva/router的history.push方法去跳轉前端路由,就不能跳了,因為handlePrompt一直返回false,除非返回ture,否則這個頁面通過a標簽就無法跳轉了...   

  • 此時無論怎么點擊一鍵開啟都不會有效果,那么改成return true試試 
 
 
 
 
  1. public handlePrompt = (location: Location) => {  
  2.       return true;  
  3.   }; 
  •  一跳就過去了

問題來了,怎么判斷是否需要跳轉呢?

  •  參考微信公眾號編輯器,如果你編輯了內(nèi)容后(跟初始進入的數(shù)據(jù)不一致),而且你是通過頁面內(nèi)a標簽跳轉的,那么就出現(xiàn)彈窗確認)

  •  那么很簡單,我們使用antd的Modal組件,以及l(fā)odash的deepclone(深拷貝)、_.isEqual(value, other)執(zhí)行深比較來確定兩者的值是否相等。

        注意: isEqual這個方法支持比較 arrays, array buffers, booleans, date objects, error objects, maps, numbers, Object objects, regexes, sets, strings, symbols, 以及 typed arrays. Object 對象值比較自身的屬性,不包括繼承的和可枚舉的屬性。不支持函數(shù)和DOM節(jié)點比較。   

實現(xiàn)思路講解

  •  組件初始化時候,深拷貝一份表單數(shù)據(jù)存入組件中
  •  當用戶通過a標簽離開頁面時,觸發(fā)handlePrompt方法,存儲離開的目的url,此時使用isEqual比較當前的數(shù)據(jù)和組件初始化的表單數(shù)據(jù)是否一致,如果不一致則出現(xiàn)彈窗,讓用戶選擇是否離開
  •  代碼實現(xiàn): 
 
 
 
 
  1. // 處理自定義離開彈窗  
  2.   handlePrompt =(location )=>{  
  3.     // 如果當前的保存為false,則彈窗提醒用戶進行保存操作  
  4.     if (!this.isSave) {  
  5.       this.showModalSave(location);  
  6.       return false;  
  7.     }  
  8.     return true;  
  9.   }  
  10.   // 展示離開的提示的彈窗  
  11.   showModalSave = location => {  
  12.     this.setState({  
  13.       modalVisible: true,  
  14.       location,  
  15.     });  
  16.   } 
  17.    // 點擊確認,進行頁面保存操作,和保存成功后路由的跳轉  
  18.   handleSaveAuto = () => {  
  19.     const { location } = this.state;  
  20.     const { history } = this.props;  
  21.     this.isSave = true;  
  22.     this.setState({  
  23.       modalVisible: false,  
  24.     });  
  25.     //進行保存操作的處理,這里可以換成自己點擊確認后需要做的操作  
  26.     this.handleSavePaper('save','exit',location.pathname)  
  27.   } 
  •  離開邏輯 
 
 
 
 
  1. // 取消是的路由跳轉  
  2.   gotoNewUrl(url){  
  3.     const {dispatch,history } = this.props  
  4.     dispatch(routerRedux.push({  
  5.       pathname:url,  
  6.     }));  
  7.   }  
  8.   // 點擊取消關閉彈窗  
  9.   closeModalSave=()=>{  
  10.     const { location } = this.state;  
  11.     const {dispatch,history } = this.props  
  12.     this.isSave = true;  
  13.     this.setState({  
  14.       modalVisible: false,  
  15.     },()=>{  
  16.       this.gotoNewUrl(location.pathname)  
  17.     });  
  18.   } 
  •  html結構 
 
 
 
 
  1.   
  2.     title="溫馨提示"  
  3.     visible={this.state.modalVisible}  
  4.     closable={false}  
  5.     centered  
  6.     onCancel={this.closeModalSave}  
  7.     footer={null}  
  8. >  
  9.   

    即將離開當前頁面,是否保存當前修改?

     
  10.     
  11.     保存  
  12.     取消  
  13.   
  
  •  

  • 網(wǎng)頁題目:如何讓用戶選擇是否離開當前頁面?
    URL鏈接:http://www.5511xx.com/article/dhdeccj.html