2018-07-25

1、使用移动组件库mint-ui

Mint UI是基于Vue.js的移动组件库,有很多可以使用,参考这里

使用时首先install,npm i mint-ui --save

之后需要先引入组件,在main.js中

import MintUI from 'mint-ui';
import 'mint-ui/lib/style.css';

Vue.use(MintUI);

使用了date time picker,用来选择日期,Indicator用来显示正在加载,Toast用来弹出提示信息,loadmore的pull-down实现上拉加载更多。

具体使用方法参见文档

注意:pull-down使用时,在进入界面时直接触发继续加载的事件,在滚动的外面需要加一个div并指定其高度,里面的内容超过这个高度才会滚动。

<div ref="wrapper" :style="{ height: wrapperHeight + 'px' }">
<mt-loadmore :bottom-method="loadBottom" :bottom-all-loaded="allLoaded" ref="loadmore" :auto-fill='false'>
</mt-loadmore>
</div>

在script里需要引入这个组件,而且需要在mounted钩子里加入

import { Loadmore } from 'mint-ui'mounted: function () {
this.wrapperHeight = document.documentElement.clientHeight - this.$refs.wrapper.getBoundingClientRect().top
},

对应的继续加载的函数如下

loadBottom: function () {
this.currPage ++
HTTP.get('你的url' + '?page=' + this.currPage + '&size=' + this.pageSize)
.then(function (response) {
if (response.data.results.length === 0) {
this.allLoaded = true // 当所有数据 全部读取完成的时候 停止下拉读取数据
}
this.items = this.items.concat(response.data.results)
}.bind(this))
.catch(function (error) {
console.log(error)
})
this.$refs.loadmore.onBottomLoaded()
}

在下拉到一定位置之后进入到下级页面,需要纪录用户的位置,在router的定义的文件里,加入

mode: 'history',

scrollBehavior (to, from, savedPosition) {
if(savedPosition) {
setTimeout(() => {
window.scrollTo(savedPosition.x, savedPosition.y)
}, 200)
}
}

同时,需要纪录用户当前加载到那个页面,目前的解决方案是在beforeRouterLeave中存储当前页数,在返回到这个页面的时候,从localStorage中读取一下页数,加载出来

beforeRouteLeave (to, from, next) {
this.$localStorage.set('backlogPage', this.currPage)
next()
}, HTTP.get('你的URL?page=1&size=' + size)

2、一些细枝末节

  1. js的数组遍历

Arr.forEach(function(obj){
console.log(obj)
})2) JavaScript中有 6 个值为“假”: false, null, undefined, 0, ''(空字符串), NaN. 其中 NaN 是 JavaScript 中唯一不等于自身的值, 即 NaN == NaN 为 false.3) JavaScript splice() 方法,删除数组的特定元素

  1. ===是精确等于,==是各种类型的都可以判断等于

严格”的”===”,它在求值时不会这么宽容,不会进行类型转换。所以表达式strA === strB的值为false,虽然两个变量持有的值相同。
使用”==”操作符时,JavaScript会尝试各种求值,以检测两者是否会在某种情况下相等。所以下面的表达式结果为true: strA == strB。

5) js弹出选择框、提示框等

//弹出一个询问框,有确定和取消按钮
function firm() {
//利用对话框返回的值 (true 或者 false)
if (confirm("你确定提交吗?")) {
alert("点击了确定");
}
else {
alert("点击了取消");
}
}

  1. date格式的设置

采用JS的date对象的方法date.toLocaleDateString()可以将date对象转换成字符串的形式

  1. 页面刷新

window.location.reload()

  1. 输入框的禁用

disabled属性,true时不能写

  1. 文本溢出的处理

一行字数太多,不能完全显示的,可以采用溢出的部分用...表示的方式

overflow : hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: 2;

-webkit-box-orient: vertical;

  1. 导航栏(抽屉),右滑弹出,左滑消失,滚动禁用(就是导航栏未出现时页面可以滚动,导航栏出现后导航栏这一层的下面就不能滚动(但导航栏里的内容能滚动)

使用vue-directive-touch插件,首先install,在main.js中引入并use

import touch from 'vue-directive-touch'

Vue.use(touch)

之后使用的时候,如下实现左滑右滑的事件控制,

<div v-touch:left="menuDisappear" v-touch:right="showMenu"></div>

web端禁止鼠标滚轮,可以采用

onmousewheel="return false;"

移动端,禁止用户滑动屏幕,touch事件,touchstar,touchmove,touchend

ontouchmove="return false;"

同时,可以采用移动端的fixed布局,实现固定的标签等布局

之后,在移动端出现,首页滑动到底部时,抽屉自动弹出,以及移动端滚动穿透问题

解决方案,首先在css里添加

.modal-show {
position: fixed;
width: 100%;
}

之后,添加方法

disable_scroll: function () {
this.scrollTop = document.getElementById('yourId').scrollTop
document.getElementById('yourId').classList.add('modal-show')
document.getElementById('yourId').style.top = -this.scrollTop + 'px'
},
enable_scroll: function () {
document.getElementById('yourId').classList.remove('modal-show')
document.getElementById('yourId').scrollTop = this.scrollTop

}

最后,在watch里添加监听

watch: {
isShow: function () {
if (this.isShow) {
this.disable_scroll()
} else {
this.enable_scroll()
}
}

}

问题得以解决

3、使用webview将vue开发的app安装到手机

1) IOS的UIWebView使用方法

使用示例:在Xcode中新建Single View Application,在ViewController.m中的viewDidLoad中加入

UIWebView * view = [[UIWebView alloc]initWithFrame:self.view.frame];

[view loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.baidu.com"]]];

[self.view addSubview:view];

之后新建项目,报错,

App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.

解决方案是:

在info.plist 中输入App Transport Security Settings ====>Allow Arbitrary Loads

  1. Android的WebView

首先,下载android studio,新建一个空的project,配置环境变量

open .bash_profile

export ANDROID_HOME=SDK地址

export PATH=ANDROID_HOME/platform-tools:ANDROID_HOME/tools:$PATH

报错,null

java.lang.NullPointerException at com.jetbrains.cidr.lang.workspace.OCWorkspaceManager.getWorkspace(OCWorkspaceManager.java:12) at

解决方案:禁用插件NDK 即可

使用webview的方法

在manifest.xml中与application同级加上

<uses-permission android:name="android.permission.INTERNET"/>

在layout的activity_main文件里加上

<WebView
android:id="@+id/webView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

在项目的main activity里加上

import android.webkit.WebView;
import android.webkit.WebViewClient;
public class MainActivity extends AppCompatActivity {
private WebView webview;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webview = (WebView) findViewById(R.id.webView1);
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setUseWideViewPort(true);
webSettings.setLoadWithOverviewMode(true);
webSettings.setSupportZoom(true);
webSettings.setLoadsImagesAutomatically(true);
webSettings.setDomStorageEnabled(true); //不设置的话不能load页面
webview.loadUrl("http://www.baidu.com/");
webview.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
}}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,056评论 25 707
  • 一、访问元素的属性 A.核心Dom B.HTML Dom C.自定义属性: 案例 div属性 去百度 自定义...
    wlki阅读 225评论 0 0
  • 生活把我逼进了角落, 我的背与角落两片墙紧贴着, 幸庆角落有两片墙,我双手各贴一片墙, 双手触感细胞慢慢扩散延伸,...
  • 迎着英姿飒爽的秋风,由深圳地铁集团工会组织香梅站区和上梅林站区的2017团队拓展活动来到了东莞的观音山,此行在于加...
    风起南龥阅读 471评论 0 2
  • 你有没有过 一无所有的样子 当然,像昏迷不醒送进ICU抢救几天几夜的那种,一丝不挂的,就盖一床被子。然后随时掀起来...
    爱娇阅读 549评论 0 1