vue移動(dòng)端項(xiàng)目記點(diǎn)

0、在index.html文件中添加<meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">

1、position:absolute: 定位的時(shí)候不同手機(jī)的瀏覽器版本不一樣,存在兼容性問題,所以要修改為fixed,然后使用left: calc(50% - 1rem )進(jìn)行定位;

2、event.touches[0].pageY:移動(dòng)端事件touchstart,touchmove,touchend,在vue中的手指滑動(dòng)的對(duì)象是要傳入$event才可以使用event.touches[0].pageY等值;

3、返回頂部:根據(jù)touchend事件判斷document.body.scrollTop的值是否大于1000來控制返回頂部按鈕的顯示和隱藏;

4、彈窗定位: postion: absolute; left: 50%; top: 50%; margin-top: -height/2; margin-left: -width/2;

5、localstorage:存儲(chǔ)對(duì)象的時(shí)候存儲(chǔ)的是字符串JSON.stringify(),取的時(shí)候是對(duì)象( JSON.parse() );

6、@input: 實(shí)時(shí)監(jiān)聽input中的值的時(shí)候,focus和blur都不能滿足需求的時(shí)候可以使用input事件;

7、分享組件: (1)<a target="_blank"><img src="/static/weibo.png" alt="wechat">分享到微博</a>;

8、左右滑動(dòng)效果:的時(shí)候可以使用overflow-x:auto,但是在蘋果手機(jī)上會(huì)有問題,解決兼容的方法是:-webkit-overflow-scrolling: touch;

9、移動(dòng)端使用百度分享的時(shí)候:

created(){

window._bd_share_main && window._bd_share_main.init()
},
mounted(){
window._bd_share_main && window._bd_share_main.init()
},

否則百度分享會(huì)出現(xiàn)點(diǎn)擊兩次才出現(xiàn)分享按鈕,同時(shí)在index.html做出相應(yīng)的配置;

10、異步渲染: 在vue項(xiàng)目中的有時(shí)候由于異步的原因?qū)е耫om渲染問題,獲取不到對(duì)應(yīng)的節(jié)點(diǎn),在使用this.$nextTick無效的情況,可以使用 setTimeout等待dom加載完成之后執(zhí)行函數(shù),不過不推薦,會(huì)有性能問題;

11、移動(dòng)端H5實(shí)現(xiàn)上傳圖片: http://javascript.ruanyifeng.com/htmlapi/file.html#toc0,推薦看一下這個(gè),使用H5 API中的readAsDataURL,獲取圖片返回的base64編碼data-uri對(duì)象。,然后去請(qǐng)求后臺(tái)的返回圖片路徑,在處理圖片顯示的時(shí)候,會(huì)有兩種選擇: (1)不請(qǐng)求后臺(tái),直接渲染圖片(2)base64請(qǐng)求后臺(tái),渲染圖片,還有就是刪除的時(shí)候要保持和數(shù)據(jù)庫同步;

12、移動(dòng)端不支持select,自己div模擬select下拉效果;

13、請(qǐng)求傳參: 傳遞參數(shù)的時(shí)候是包含#的url的時(shí)候,后臺(tái)可能不識(shí)別#,需要編碼的可以使用encodeURI(),encodeURIComponent();

14、Hybrid: 和原生交互的時(shí)候,給IOS傳遞參數(shù)的時(shí)候,使用 window.location.href = "next://";那么IOS就可以接受到next這個(gè)參數(shù);

15、導(dǎo)航鉤子:判斷離開一個(gè)路由的時(shí)候執(zhí)行一個(gè)方法route1.beforeEach((to, from, next) => {

if( from.path == '/theme_detail' ){
console.log( 88888 )
}
next()
});

export default route1

16、iphone5s不兼容display:flex:處理方法: display:-webkit-flex;-webkit-box; flex:1; -webkit-flex: 1;-webkit-box-flex:1;

17、原生和IOS交互的時(shí)候,IOS使用第三方庫WebViewJavascriptBridge,原生調(diào)用js方法,在js中的時(shí)候使用方法: 一個(gè)js文件全局配置const BridgeMixin = {

methods: {
setupWebViewJavascriptBridge(callback) {
if (window.WebViewJavascriptBridge) { return callback(WebViewJavascriptBridge); }
if (window.WVJBCallbacks) { return window.WVJBCallbacks.push(callback); }
window.WVJBCallbacks = [callback];
var WVJBIframe = document.createElement('iframe');
WVJBIframe.style.display = 'none';
WVJBIframe.src = 'https://bridge_loaded';
document.documentElement.appendChild(WVJBIframe);
setTimeout(function() { document.documentElement.removeChild(WVJBIframe) }, 0)
}
}
}
export {
BridgeMixin
},然后在調(diào)用的頁面, this.setupWebViewJavascriptBridge(function(bridge){
bridge.registerHandler('testJavascriptHandler', function(data, responseCallback) {
var responseData = { 'Javascript Says':'Right back atcha!' }
alert( data )
responseCallback(responseData)
};

18、當(dāng)數(shù)據(jù)多的時(shí)候可以使用路由外面裹一層keep-alive,要加載router-view中,這樣再次進(jìn)入這個(gè)路由的時(shí)候就不會(huì)重新加載了,比如進(jìn)入頁面看到14行了,然后點(diǎn)擊進(jìn)入下一個(gè)頁面,返回的時(shí)候直接定位是14行;

19、原生js實(shí)現(xiàn)滾動(dòng)到頂部

//document.body.scrollTop獲取chrome等瀏覽器的scrollTop,document.documentElement.scrollTop獲取IE瀏覽器的scrollTop
let x = document.body.scrollTop || document.documentElement.scrollTop;
let timer = setInterval(function(){
x = x - 10;
if( x < 100 )
{
x = 0;
window.scrollTo(x,x);
clearInterval(timer);
}
window.scrollTo( x, x );
},"10");

20、如何把build的項(xiàng)目在本地跑起來,把config下面的index.js中的assetsPublicPath的都改為./

21、地址欄添加icon的時(shí)候因?yàn)槭怯玫氖莣ebpack打包的所以這個(gè)icon要放在static文件下;

22、如何給網(wǎng)站添加站標(biāo): 在線生成ico站標(biāo),一般是16*16,將制作好的站標(biāo)命名為favicon.ico,放在項(xiàng)目根目錄,然后在首頁的<head></head>標(biāo)簽內(nèi)添加

<link rel="shortcut icon" href="/favicon.ico" />

<link rel="bookmark"href="/favicon.ico" />

23、在自定義組件中使用這些受限制的元素時(shí)會(huì)導(dǎo)致一些問題,例如:

<table>
<my-row>...</my-row>
</table>
自定義組件 <my-row> 被認(rèn)為是無效的內(nèi)容,因此在渲染的時(shí)候會(huì)導(dǎo)致錯(cuò)誤。 變通的方案是使用特殊的 is 屬性:
<table>
<tr is="my-row"></tr>
</table>

24、vue設(shè)置請(qǐng)求頭的時(shí)候:

Vue.http.interceptors.push((request, next) =>{
request.headers.set('loginCode', this.loginCode);
next((response) => {
return response
});
});

25、插件開發(fā): 聲明插件-> 寫插件-> 注冊(cè)插件 —> 使用插件

26、Vue.mixin({//這里的代碼會(huì)在每個(gè)組件(包括根組件)的created執(zhí)行之前 執(zhí)行

created: function () {
console.log("組件開始加載")
}
}),也就是這個(gè)的代碼的執(zhí)行循序是在created方法之前的;

27、假如是寫給例如methods屬性的某個(gè)方法,組件里若本身有test方法,并不會(huì)先執(zhí)行插件的test方法,再執(zhí)行組件的test方法,而是只執(zhí)行其中一個(gè),并且優(yōu)先執(zhí)行組件本身的同名方法.這點(diǎn)需要注意

28、想獲取子組件的值是通過自定義事件獲取的,子組件this.$emit(eventName, params),父組件監(jiān)聽事件獲取參數(shù)v-on:eventName=eventName,eventName(params){console.log(params)},

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1、position:absolute: 定位的時(shí)候不同手機(jī)的瀏覽器版本不一樣,存在兼容性問題,所以要修改為fix...
    瞳孔里的溫柔你看得見不閱讀 1,221評(píng)論 0 7
  • 使用Vue項(xiàng)目寫了一個(gè)移動(dòng)端項(xiàng)目,然后又把項(xiàng)目硬生生的抽離了組件,一直忙著寫RN項(xiàng)目沒有時(shí)間總結(jié)心得,今天上午終于...
    冇得感情閱讀 1,014評(píng)論 0 2
  • 1、position:absolute: 定位的時(shí)候不同手機(jī)的瀏覽器版本不一樣,存在兼容性問題,所以要修改為fix...
    沉默中疼著閱讀 411評(píng)論 0 1
  • H5移動(dòng)端知識(shí)點(diǎn)總結(jié) 閱讀目錄 移動(dòng)開發(fā)基本知識(shí)點(diǎn) calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,833評(píng)論 0 26
  • 好吧我承認(rèn)我看這些書就是為了證明我自己不普通 可是證明這件事 已經(jīng)決定了我的普通是嗎?
    執(zhí)念馥郁閱讀 161評(píng)論 0 0

友情鏈接更多精彩內(nèi)容