vue移动端项目通用技巧

目录

一、配置文件

1.1、取消eslint校验

1.2、基础文件引入

1.3、iconfont引入+svg使用

1.4、css的简化应用

1.5、内容溢出用省略号替代

1.6、非组件库的底部导航跳转

1.7、基础版轮播图

1.8、背景颜色以及rem适配

一、配置文件

1.1、取消eslint校验

在vue.config.js文件里:

const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  lintOnSave: false,//取消eslint校验
})

1.2、基础文件引入

在main.js文件里:

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import './vantui'//按需引入vant
// css样式重置
import '@/assets/css/reset.css'
import '@/assets/css/index.scss'
import '@/assets/font/iconfont.css' //引入iconfont样式,图标们才会出现
import '@/assets/font/iconfont.js' //引入iconfont彩色图标(symbol)

Vue.config.productionTip = false
new Vue({
  router,
  store,
  render: h => h(App)
}).$mount('#app')

1.3、iconfont引入+svg使用

官网:iconfont-阿里巴巴矢量图标库

搜索项目要使用的图标们,添加到购物车后下载到一个项目里,得到一个压缩包,进行解压,放入项目静态资源文件夹里;

在网站上运行项目里的demo_index.html文件,就可以看到自己的图标。

(1)Font class格式的使用:<i class='iconfont icon-fangdajing'></i>

(2)Symbol格式的使用:第二个<use>是循环渲染的用法

        <svg class="icon-font">
          <use xlink:href='#icon-chazhaoyonghu'></use>
          <use :xlink:href="v.icon"></use>
        </svg>

第一种就是平常的黑白图标,第二种就是对彩色图标的应用。

1.4、css的简化应用

  如下图,上面的svg彩色图标明显比下面的图标大一点,而且这15个小盒子都是依靠v-for渲染得到的。借助  li:nth-child(-n+5) svg {.......}即可拿到前5个盒子。反之,li:nth-last-child(-n+4)取到最后四个盒子.

.nav-menu ul {
    display: flex;
    flex-wrap: wrap;
    li {
        flex: 0 1 20%;
        text-align: center;
        margin: .625rem 0;
        span {
            display: block;
        }
    }
    // 前5个尺寸变大
    li:nth-child(-n+5) svg {
        width: 2.5rem;
        height: 2.5rem;
    }
    // 从第6个起尺寸变小
    li:nth-child(n+6) svg {
        width: 1.25rem;
        height: 1.25rem;
    }
}

1.5、内容溢出用省略号替代

移动端宽度有限,如果一行放不下,又不想换行,就用省略号代替!

 .main-module-1 h4 {
                white-space: nowrap;
                overflow: hidden;
                text-overflow: ellipsis;
}

1.6、非组件库的底部导航跳转

点击指定导航,颜色发生改变,借助linkActiveClass属性

 以下为样式以及对应视图:样式在main.js里引入了index.scss

      <div class="footer-list">
        <ul>
          <li v-for="(v, i) in footerList" :key="i">
            <router-link :to="v.path">
              <i class="iconfont" :class="v.icon"></i>
              <span>{
   
   { v.title }}</span>
            </router-link>
          </li>
        </ul>
      </div>
<script>
export default {
  data() {
    return {
      footerList: [
        { title: "首页", icon: "icon-shouye", path: "/index" },
        { title: "会员", icon: "icon-huiyuan", path: "/memeber" },
        { title: "订单", icon: "icon-dingdan", path: "/ordre" },
        { title: "我的", icon: "icon-wode", path: "/my" },
      ],
    };
  },
};
</script>
<style lang="scss" >
//最外层的设置,防止页面横向滚动
html,
body {
    max-width: 720px;
    overflow-x: hidden;
    margin: 0 auto;
}
// 底部导航栏
.footer {
    height: 3.75rem;
    .footer-seat {
        position: fixed;
        bottom: 0;
        left: 0;
        width: 100%;
        height: 3.75rem;
        background-color: beige;
        border-top: 1px solid #e5e5e5;
        .footer-list {
            max-width: 720px;
            height: 3.75rem;
            margin: 0 auto;
            ul {
                display: flex;
                text-align: center;
                align-items: center;
                height: 100%;
                li {
                    flex: 1;
                    i {
                        font-size: 1.5rem;
                    }
                    span {
                        display: block;
                    }
                }
            }
        }
    }
}
</style>

1.7、基础版轮播图

自动播放:目前显示的图片对应总图片数组的指定下标,到最后一张后继续从第一张开始。

<template>
  <div class="banner">
    <img v-for="(v, i) in menuList" :key="i" :src="v" v-show="n == i" />
  </div>
</template>
<script>
export default {
  data() {
    return {
      n: 0, //初始化
      menuList: [
        require("@/assets/img/b-1.jpg"),
        require("@/assets/img/b-2.jpg"),
        require("@/assets/img/b-3.jpg"),
      ],
    };
  },
  mounted() {
    this.play();
  },
  methods: {
    autoplay() {
      this.n++;
      if (this.n == this.menuList.length) {
        this.n = 0;
      }
    },
    play() {
      setInterval(this.autoplay, 2000);
    },
  },
};
</script>

1.8、背景颜色以及rem适配

在App.vue的样式中

#app {
  height: 100%;
  background-color: #efefef;
  font-size:.14rem;
}
html,
body {
  height: 100%;
}
html{
 font-size:100px !important;
}

此时,要对字体设置16px,则应写成0.16rem,标签高度为100px,就写1rem。

猜你喜欢

转载自blog.csdn.net/qq_44930306/article/details/130366841