zoukankan      html  css  js  c++  java
  • vue去哪app

    去哪网app

    1.项目初始化

    1. reset.css 在main.js中引入,来进行项目样式的初始化

    2. iconfont 在main.js中引入 , 进行全局的字体图标

    3. Fastclick 在main.js中引入,fastclick.attach(document.body);调用,来解决点击3秒延迟问题

    2. HOME页面

    首页完成效果

    ![image-20200517205725935](/Users/jackson/Library/Application Support/typora-user-images/image-20200517205725935.png)

    Header组件
    Swiper组件
    1. Vue-swiper-awesome 第三方js库, 实现轮播图,使用方法见官网
    2. 利用 在 swiper 在 外边 包上 一个指定 高度的 盒子 wrapper来解决 , 页面图片的抖动问题。
    1.第一种方法 (适配性强)
    .wrapper {
      overflow: hidden;
       100% ;
      height: 0;
      padding-bottom: 相对于图片宽度的百分比x;
    }
    2.第二种方法(兼容性不强)
    .wrapper {
       100%;
      height: 0.26vw;
    }
    
    1. 改变第三方组件样式

    因为 scoped 原因写的样式只能作用于当前组件, 无法作用于 当前第三方组件中定义好的样式,所以利用穿透来改变

    .wrapper >>> .swiper-pagination-bullet-active
            background-color #fff
    
    ICons图标组件

    ![image-20200516152209049](/Users/jackson/Library/Application Support/typora-user-images/image-20200516152209049.png)

    1. 利用swiper来实现分页效果。
    2. 通过computed计算属性,pages() 函数 来返回一个数据结构类似于 哈希链地址法, 用来进行嵌套循环的遍历。
    3. 换行 显示省略号 。
    		overflow: hidden;
        text-overflow:ellipsis;
        white-space: nowrap;
    
    推荐组件

    ![image-20200517204812420](/Users/jackson/Library/Application Support/typora-user-images/image-20200517204812420.png)

    周末去哪组件

    ![image-20200517204904081](/Users/jackson/Library/Application Support/typora-user-images/image-20200517204904081.png)

    通过AJAX请求来获取数据
    1. 每个页面组件各自来获取数据会多次发送请求,造成资源的浪费,所以我们通过index.vue 来发送请求再 利用 父子组件传值来进行数据的传递。
    2. mock数据 放在 public 文件下, 因为 webpack-dev-server 默认 把根目录下的public文件夹 作为 根目录 ,然后用 axios 来发送请求 就可以获取到 数据 。

    3.PLACES页面

    地方页面完成效果

    ![image-20200518223042749](/Users/jackson/Library/Application Support/typora-user-images/image-20200518223042749.png)

    Header组件封装
    LIST组件封装
    1. 由于这个组件给了绝对定位所以无法进行手指上下拖动, 所以 用了 better-scroll 这个第三方js库 ,来实现页面的的上下滚动。
    字母表组件封装
    1. 运用固定定位 定位于页面的右侧, 实现字母的 竖直方向 均分 ,可以利用 flex 布局 。
    字母表联动效果
    1. 兄弟组件之间的传值,通过 父组件 中间人 进行传递 。
    2. 实现点击滚动, 我们只需要 获取到 需要展示 区域 的 dom元素 再利用 better-scroll 提供的api 即可完成,利用 watch 来 调用 屏幕滚动 的 api
    //首先需要注册详情见官网
    this.scroll.scrollToElement(dom元素)
    
    1. 拖动

    2. 需要获取手 拖动到 的 字母, 需要 开始拖动 ,拖动过程, 结束拖动三个函数,通过 offsetTop 来计算出 拖动 到 的 元素 ,拖动过程中触发 拖动过程 这个函数, 通过 以上来实现 拖动字幕条 页面 滚动 的效果。

    性能优化
    1. 计算 A 距离 顶部的高度时,因为是固定的 所以只需要 计算一遍 即可 。 我们 利用 update 这个生命周期函数 来进行计算 (函数在 页面组件渲染完成, 和数据 进行更新时调用)。所以以上可以减少代码运行的次数。

    2. touchMove 在手指 一 移动的时候就会调用 , 执行的频率太高了,所以利用节流来减少执行的次数

    data() {
      return {
        timer: null
      }
    }
    methods: {
    	handleTouchMove() {
        if (this.timer) {
          clearTimeOut(timer)
        }
        this. timer = setTimeOut(() => {
          //执行的函数
        }, 16)
      }
    }
    
    搜索功能的实现

    利用数据双向绑定获取到 输入在 输入框中的 自,然后去数据中 查找 ,找到返回,找不到 则显示 找不到数据

     watch: {
        keyWord() {
          if (!this.timer) {
            clearTimeout(this.timer);
          }
          this.timer = setTimeout(() => {
            const result = [];
            for (let i in this.cityList) {
              this.cityList[i].forEach(element => {
                if (
                  element.name.indexOf(this.keyWord) > -1 ||
                  element.spell.indexOf(this.keyWord) > -1
                ) {
                  result.push(element.name);
                }
              });
            }
            this.list = result;
          }, 1000);
        }
      }
    
    VUEX使用

    详情见官网:

    使用KEEP—ALIVE优化网页

    问题引出: 当我们切换页面的时候 ,都会 再一次发送 ajax请求。这样很大的浪费了 资源。

    解决方式: 可以用下图包裹上标签, 来缓存获取到的数据,此时挡在切换页面的时候,每个页面的钩子函数大多数不会执行,直接从缓存中获取数据。

    ![image-20200521211712413](/Users/jackson/Library/Application Support/typora-user-images/image-20200521211712413.png)

    如果在切换页面时, 页面的某些内容需要动态改变,可以利用 activated 这个生命周期函数。

    需要根据选择的不同城市来进行数据的获得,但是利用了缓存ajax请求就不在发送,所以我们用下图的方式,先判断是否需要重新获取数据:

    ![image-20200521212624689](/Users/jackson/Library/Application Support/typora-user-images/image-20200521212624689.png)

    4.详情页

    详情页面完成效果:

    BANNER组件:

    实现banner组件下面的渐变效果,利用如下方式:

    ![image-20200521215808931](/Users/jackson/Library/Application Support/typora-user-images/image-20200521215808931.png)

    画廊组件

    效果图如下:

    ![image-20200522093935132](/Users/jackson/Library/Application Support/typora-user-images/image-20200522093935132.png)

    点击Banner 将显示 画廊组件:如上图

    1. 布局:外部用父容器包裹,内部用第三方js插件库vue-awesome-swiper,上述的swiper插件库是基于swiper 这个库的,vue-awesome-swiper@2.6.7基于swiper3。
    2. 问题:底部的分页器样式不是希望的那样,可以去官网看配置。还有就是swiper组件显示与隐藏时宽度计算会错误,导致无法拉动轮播,解决方法一并如下:

    ![image-20200522094319702](/Users/jackson/Library/Application Support/typora-user-images/image-20200522094319702.png)

    1. 逻辑: 点击BANNER 显示画廊, 点击CORRIDOR黑色区域隐藏画廊。涉及到父子组件之间的传值。
    HEADER组件
    1. 功能要求: 随着页面滚动到60距离,左上角返回按钮隐藏。header 在页面滚动60到140 之间逐渐显现

    2. 功能实现: 左上角的按钮效果好实现, header逐渐显示只要根据 页面滚动距离 与 140 的相除 就是 opcity。

    methods: {
      handleWindowScorll() {
        const top = document.documentElement.scrollTop;//垂直方向
        if(top > 60) {
    		this.opcity = top > 140 ? 1 : top / 140
        }
      }
    }
    
    activated {
      windows.addEventListener("scorll", this.handleWindowScorll)
    }
    
    1. 实现思路: 1.监听页面滚动 2.由于用了页面数据缓存所以要用activated钩子函数 3. 要实现逐渐显示: 透明度样式 与 高度的 对应关系 要明确。

    2. 问题解决: 由于 监听滚动时间绑定在了 全局 window实例上, 所以不论那个页面滚动 都会触发,这样是不好的。 所以我们在 页面 离开时 解绑就可以解决了:

    ![image-20200522112046855](/Users/jackson/Library/Application Support/typora-user-images/image-20200522112046855.png)

    递归组件

    ![image-20200522121856984](/Users/jackson/Library/Application Support/typora-user-images/image-20200522121856984.png)

    1. 问题引入: 如何实现上图中这样的层级关系。
    2. 问题解决: 利用递归组件: 递归组件就是自己组件调用自身, 自身的组件中的name 属性 ,给自己提供了一种调用方式。这一次组件的调用 与这个组件本身调用的 规则一样。

    ![image-20200522122140342](/Users/jackson/Library/Application Support/typora-user-images/image-20200522122140342.png)

    问题解决:

    取消某个组件的缓存:

    ![image-20200522122903947](/Users/jackson/Library/Application Support/typora-user-images/image-20200522122903947.png)

    解决页面滚动切换页面复原问题:

    ![image-20200522122944372](/Users/jackson/Library/Application Support/typora-user-images/image-20200522122944372.png)

    组件的动态过度
    1. 创建一个transition 组件, 之间用插槽来 可以让 需要过渡效果的组件 能插入其中。
    2. 书写效果, 然后 引入 包裹住 就可以了。

    项目接口调试,打包上线

    接口调试:

    由于用了代理 在 config文件夹下:

    ![image-20200522125115058](/Users/jackson/Library/Application Support/typora-user-images/image-20200522125115058.png)

    真机调试:

    1. 由于服务器是通过 webpack-dev-server 启动的 ,所以不支持 域名访问 的 方式,可以通过 修改package.json 来配置一下, 如下图:

    ![image-20200522125835767](/Users/jackson/Library/Application Support/typora-user-images/image-20200522125835767.png)

    1. BUG: 拖动字母表整个页面往下动,解决方式如下 :来阻止拖动事件的默认行为
      ![image-20200522130033289](/Users/jackson/Library/Application Support/typora-user-images/image-20200522130033289.png)

    2. 由于一些手机等级较低,不支持一些js的 新语法,会报错所以用 babel-polyfill 来解决js 的兼容问题![image-20200522130906222](/Users/jackson/Library/Application Support/typora-user-images/image-20200522130906222.png)

  • 相关阅读:
    HybridAPP开发框架Ionic+AngularJS+Cordova搭建
    MySQL数据类型DECIMAL用法
    RabbitMQ用户管理
    Linux中Mysql root用户看不到mysql库问题解决方式
    RabbitMQ环境安装
    RabbitMQ简介
    Mysql根据一个基库生成其他库与其不同的库升级脚本
    关于中文乱码的解决方法(URL方式)
    java反射机制
    the jar file rt.jar has no source attachment
  • 原文地址:https://www.cnblogs.com/jackson1/p/12936608.html
Copyright © 2011-2022 走看看