vue项目中,flexable.js结合muse-ui框架存在的问题

一、前言

这是在6月份找到工作以来的第一篇博客,前段时间每天都闲的发慌,每天就是接一下小需求然后一天完成,完成后就混几天,有种混吃等死的生活体验,可能这就是应届毕业生都会面临的问题。过来好几个月,终于迎来了春天,小组的老大准备带我参加一个系统的开发,这让我感到很兴奋,毕竟不想一直做个切图仔。

二、正言

项目是给公司旗下的代理商使用的一款移动端的管理系统,本身系统是存在的,不过是比较老的系统了,而且并没有做到前后端分离,个人觉得这样的系统在维护起来会比较麻烦,前端代码跟后端代码混在一起,看的我是头皮发麻。在vue框架得到广泛的普及和使用之后,当然我们也选用了这个框架,由于是做移动端,为了节省时间,当然我们不可能去写好几套样式,所以一开始选用了flexable框架。

1.flexable.js

这是阿里淘宝的前端库,做到了极好的自适应,所有的px都会帮你转化成rem。这样省去了大量的工作。

(1)安装插件

  npm install lib-flexible --save

(2)在confing文件夹下面的util.js里面加入

var px2remLoader = {
loader: 'px2rem-loader',
options: {
remUnit: 75,//设计稿除以10得到的值
    }
}

//在下面的函数中修改着一句
function generateLoaders(loader, loaderOptions) {
 
const loaders = options.usePostCSS ? [cssLoader, postcssLoader,px2remLoader] : [cssLoader,px2remLoader]

(3)在main.js里面的头部中引入js import "lib-flexible"

(4)在index.html的头部中指定meta类型<meta name="viewport" content="width=device-width, initial-scale=1.0">

这样子基本就能够实现自适应了。

针对与flexable.js的效果我有话要讲一下,就是在转化的为rem过后,界面看起来的会比设计稿的小。同样是200px的div,转成rem后会比原来就是200px的看起来要小。第二就是注解,如果某个元素不想转化为rem,那么就可以在对应的CSS属性后面加上/*no */,就可以了,比如border:1px solid #000; /*no */  ;同样的我们可以使用/*px*/,这个常用于字体大小,可以生成三套不同的像素大小。

2.muse-ui

同时我们使用谷歌的muse-ui这个前端框架,个人觉得很好看,也用来写过移动端的聊天室界面,感觉还是挺好的,贴个连接。去muse-ui如果要使用这个框架的话上面也有教程。

(1)安装

npm install muse-ui -S

(2)使用

引入的方式有两种,一种是全局引入,第二种是按需引入

完整引入的方式
import Vue from 'vue';
import MuseUI from 'muse-ui';
import 'muse-ui/dist/muse-ui.css';

Vue.use(MuseUI);

new Vue({
  el: '#app',
  render (h) {
    return h('mu-button', {}, 'Hello World');
  }
});

  按需引入的话首先需要下载插件

借助 babel-plugin-import, 我们可以只引入需要的组件,以达到减小项目体积的目的。 首先,安装 babel-plugin-import, less-loader:

npm i babel-plugin-import less less-loader -D

然后,将 .babelrc 修改为:

{
  "plugins": [
    ["import", {
      "libraryName": "muse-ui",
      "libraryDirectory": "lib",
      "camel2DashComponentName": false
    }]
  ]
}

 在mian.js里面添加你想要使用组件

import Vue from 'vue';
import 'muse-ui/lib/styles/base.less';
import { Button, Select } from 'muse-ui';
import 'muse-ui/lib/styles/theme.less';

Vue.use(Button);
Vue.use(Select);
import Vue from 'vue';
import 'muse-ui/lib/styles/base.less';
import { Button, Select } from 'muse-ui';
import 'muse-ui/lib/styles/theme.less';

Vue.use(Button);
Vue.use(Select);

 3. 存在的问题

muse-ui本身作为一款适配移动端的UI框架,本身是做了自适应的,在引入flexible.js 后。强行转化框架的像素,导致组件变形,样式发生改变,变得很丑,最好的办法就是不使用flexible.js。而是通过脚本来控制。

 

<script>
      (function(doc, win) {
        var docEl = doc.documentElement,
          resizeEvt =
            "orientationchange" in window ? "orientationchange" : "resize",
          recalc = function() {
            var clientWidth = docEl.clientWidth;
            if (!clientWidth) return;
            if (clientWidth >= 640) {
              docEl.style.fontSize = "100px";
            } else {
              docEl.style.fontSize = 100 * (clientWidth / 640) + "px";
            }
          };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvt, recalc, false);
        doc.addEventListener("DOMContentLoaded", recalc, false);
      })(document, window);
    </script>

 

 类似的代码在网上很多。自己百度一下也有一堆。通过rem这种像素单位,可以再不同的手机上缩放,不会因为不用手机像素的不同使得样式乱掉,也省去了写多几套样式的时间,一套要是顶几套。

前端道路长且阻,遇坑则填!

转载于:https://www.cnblogs.com/jiang-z/p/9998778.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值