vue项目中的问题

1.项目中用的是什么方式来实现响应式布局:用的rem。

在使用vue-cli搭建好项目框架后,在目录结构的index.html文件中添加一段js代码:   

fnResize();
window.onresize = function () {
  fnResize();
}
function fnResize() {
  var deviceWidth = document.documentElement.clientWidth || window.innerWidth;
  if (deviceWidth >= 750) {
    deviceWidth = 750;
  }
  if (deviceWidth <= 320) {
    deviceWidth = 320;
  }
  document.documentElement.style.fontSize = (deviceWidth / 7.5) + 'px';
}

vue项目中使用lib-flexible解决移动端适配的问题:

第一部分:项目中引入lib-flexible

一、项目中安装lib-flexible

 

$  npm install lib-flexible --save

二、在项目的入口js文件中引入lib-flexible

import 'lib-flexible'

通过要以上两步,就完成了在vue项目使用lib-flexible来解决移动端适配了。

lib-flexible会自动在html的head中添加一个meta name="viewport"的标签,同时会自动设置html的font-size为屏幕宽度除以10,也就是1rem等于html根节点的font-size。假如设计稿的宽度是750px,此时1rem应该等于75px。假如量的某个元素的宽度是150px,那么在css里面定义这个元素的宽度就是 width: 2rem

注意:

    1.检查一下html文件的head中,如果有 meta name="viewport"标签,需要将他注释掉,因为如果有这个标签的话,lib-flexible就会默认使用这个标签。而我们要使用lib-flexible自己生成的 meta name="viewport"来达到高清适配的效果。

    2.因为html的font-size是根据屏幕宽度除以10计算出来的,所以我们需要设置页面的最大宽度是10rem。

    3.如果每次从设计稿量出来的尺寸都手动去计算一下rem,就会导致我们效率比较慢,还有可能会计算错误,所以我们可以使用px2rem-loader自动将css中的px转成rem

第二部分:使用px2rem-loader自动将css中的px转换成rem

一、安装px2rem-loader

 

$  npm install px2rem-loader --save-dev

二、配置px2rem-loader

    1.打开build/utils.js文件,找到exports.cssLoaders方法,在里面添加如下代码

 
  1. const px2remLoader = {

  2. loader: 'px2rem-loader',

  3. options: {

  4. remUint: 75

  5. }

  6. }

    2.修改generateLoaders方法中的loaders

 
  1. // 注释掉这一行

  2. // const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]

  3. // 修改为

  4. const loaders = [cssLoader, px2remLoader]

  5.  
  6. if (options.usePostCSS) {

  7. loaders.push(postcssLoader)

  8. }

 

然后重新npm run dev,打开控制台可以看到代码中的px已经被转成了rem

注意:

    1.此方法只能将.vue文件style标签中的px转成rem,不能将script标签和元素style里面定义的px转成rem

    2.如果在.vue文件style中的某一行代码不希望被转成rem,只要在后面写上注释 /* no*/就可以了

 

2.客户端适配

怎么适配各种设备:

   JS判断客户端类型

  JS判断客户端是否是iOS或者Android手机移动端

  通过判断浏览器的userAgent,用正则来判断手机是否是ios和Android客户端。

方法一:

var u = navigator.userAgent;
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端
if (isAndroid) {
  alert('这是Android');
}
if (isiOS) {
  alert('这是IOS');
}

方法二:

if (/(iPhone|iPad|iPod|iOS)/i.test(navigator.userAgent)) {
  //alert(navigator.userAgent);
  alert('这是IOS');
} else if (/(Android)/i.test(navigator.userAgent)) {
  //alert(navigator.userAgent);
  alert('这是Android');
} else {
  alert('这是PC');
};

3.css样式缓存

 在实际项目开发过过程中,页面是上传到服务器上的。而为了减少服务器的压力,让用户少加载,浏览器会将图片、css、js缓存到本地中,以便下次访问网站时使用。这样做不仅减少了服务器的压力,并且也减少了用户的下载次数,获得更好的用户体验。 

然而在版本升级或做一些css、js等调整的时候,缓存导致用户无法显示更新后的样式,这是另人头头疼的问题。除非用户自行手动升级缓存,不过几乎所有用户不会为了正常访问这个网站而去手动清除缓存,因为用户根本不知道是不是缓存的问题,而归根结底,用户就是认为你的页面存在问题,不能正常访问。 

为了可以正常使用缓存,又避免这样的问题,我们可以动脑筋想想,如果解决此问题呢? 

如果更改了样式不能正常访问,那么更改样式的文件名呢?答案是可以的,这里将不再验证。然而每次都手动的去更改文件名显然过于麻烦,能不能不更改文件名呢?答案是肯定的。我们可能通在引入的文件名后面加入版本号,与之前的版本都不同的版本号(一般为更新日期)。代码如下: 
 

复制代码

代码如下:


 
 


可以看到我的CSS文件名及JS文件名后面都跟了"v=20140829",这样做可以不去改变文件名又做到缓存的同时,可以实时更新。而"v=20140829"只是普遍习惯书写,可更改为其它的。 
 

最后是图片,一般img标签的图片都不会重名,因为都是在后台生成的文件名。而如果是固定的文件名图片,方法同上。而对于背景图,由于更改了样式名,图片的解析路径自然是更新同步,因此背景图也更新了。

3.我的优化方式

   css样式后面加随机数作为参数。

   eg.


还有一种方法,是可以在html头部加上no-cache

   

 

你可能感兴趣的:(vue项目中的问题)