记一次用vue做的活动页的方法步骤


Posted in Javascript onApril 11, 2019

前言

最近,公司的PR提了一个需求 自动获取七天新上传的并且审核通过的商品做成固定的链接的一个活动页面。当时想了一想就用vue做了,感觉效果还行,在这分享一下我是如何做的 希望对大家有一点点帮助。

效果图

记一次用vue做的活动页的方法步骤

附上线上地址

在线预览:新品租赁页

1:页面的构建及优化

所谓的活动页 首先第一步肯定是把页面切出来,这里就是2*n页面 我这里用的就是grid布局(也可以用flex)我主要讲三个点:

1:关于图片的优化

由于后段传过来的图片大小不一样,我就对图片做了做了一下优化 。整个图片在填充盒子的同时保留其长宽比

代码:

.product-img img {
 object-fit: contain;
 width: auto;
 height: auto;
 max-width: 100%;
 max-height: 100%;
 margin: 0 auto;
}

为了不让图片觉得突兀 我们可以给图片的盒子设置一个伪元素

.product-img::after {
 content: '';
 position: absolute;
 top: 0;
 left: 0;
 -webkit-transform: translate3d(0, 0, 0);
 transform: translate3d(0, 0, 0);
 z-index: 1000;
 width: 100%;
 height: 100%;
 border-radius: .1rem;
 background: rgba(85, 85, 85, 0.05);
}

2:关于页面数据还没加载出来的优化

由于从后台获取数据需要一定的时间 当数据没加载进来的时候会出现问题(也许就是一秒但这也会给用户带来不好的体验感。)

<div class="container" :class="productList.length ? 'show': ''">

当数据没加载的时候我就设置opacity为0,当数据出来的时候就设置opacity:1

3:关于价格的优化

由于设计稿的需求是价格的整数的字体要比小数要大,所以就把整数和小数分别用spilt分隔来了。然后在给整数的字体比小数点的字体大一号就行了。

<div class="product-price">¥<span class="em">{{String(product.price).split('.')[0]}}</span>.{{String(product.price).split('.')[1]||'0'}}/天</div>

2:获取数据

从后台获取数据是很重要的一部分 由于后段给了二个参数 一个是当前页 一个是一个页面有多少条数据。

getList(cb){
    this.getActivityInfoById(this.curPage,this.pageSize).then((data = {})=>{
     this.total = data.total;
     if(( this.curPage * this.pageSize) >= this.total && document.readyState == "complete") {
      this.isMaxPage = true;
     }
     this.productList = this.productList.concat(data.rows || []);
     cb && cb(data)
    })
   }
getActivityInfoById: function(start, length) {
    return axios
     .get(this.api.getActivityInfoById, {
      params: {
       start: start,
       length: length
      }
     })
     .then(function(res) {
      return res.data.data;
     });
   },

3:分页

所谓的活动页肯定要做分页处理

onPage(){
    const scrollTop = document.documentElement.scrollTop || window.pageYOffset || document.body.scrollTop; 
    const bodyHeight = document.body.offsetHeight;
    const clientHeight = window.innerHeight;
    if(scrollTop + clientHeight < bodyHeight){
     return;
    }
    if(this.isGetList) return;
    if(this.total < this.curPage * this.pageSize){
     return;
    }
    
    this.curPage++;
    this.isGetList = true;
    this.getList(()=>{
     this.isGetList = false;
    });
   },

4:下拉刷新的优化

当数据还在加载中显示loading,当数据加载完成是显示扯到底了

<div class="footer" v-if="isMaxPage">- 不要扯了 已经扯到底了 -</div>
<div class="footer" v-if="!isMaxPage">- loading -</div>

5:懒加载

由于这个活动页图片有点多 所以用了懒加载

lazyLoad: function() {
    var seeHeight = document.documentElement.clientHeight; // 可见区域高度
    var imgs = document.getElementsByTagName('img');
    for (var i = this.lazyLoadIndex; i < imgs.length; i++) {
     if (
      imgs[i].getBoundingClientRect().top < seeHeight &&
      imgs[i].dataset.src &&
      imgs[i].getAttribute('src') !== imgs[i].dataset.src
     ) {
      imgs[i].setAttribute('src', imgs[i].dataset.src);
      this.lazyLoadIndex++;
     }
    }
   },

总结

作为一个即将毕业的大四学生,这是我来公司实习做的活动页,希望可以帮助大家,互相学习,一起进步。当然也有一些不足之处,请大家多多指教。码字不容易,希望大家点个赞。前端路漫漫,与君共勉之。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript之水平横向滚动歌词同步的应用
May 07 Javascript
JavaScript 常用函数
Dec 30 Javascript
省市区三级联动jquery实现代码
Apr 15 Javascript
浅析BootStrap中Modal(模态框)使用心得
Dec 24 Javascript
JavaScript实现的文本框placeholder提示文字功能示例
Jul 25 Javascript
如何解决webpack-dev-server代理常切换问题
Jan 09 Javascript
JS合并两个数组的3种方法详解
Oct 24 Javascript
vue进入页面时不在顶部,检测滚动返回顶部按钮问题及解决方法
Oct 30 Javascript
使用vue-cli3+typescript的项目模板创建工程的教程
Feb 28 Javascript
小程序实现图片移动缩放效果
May 26 Javascript
Vue Render函数原理及代码实例解析
Jul 30 Javascript
vue项目支付功能代码详解
Feb 18 Vue.js
vue数据初始化initState的实例详解
Apr 11 #Javascript
Vue起步(无cli)的啊教程详解
Apr 11 #Javascript
vue+vuex+json-seiver实现数据展示+分页功能
Apr 11 #Javascript
小白教程|一小时上手最流行的前端框架vue(推荐)
Apr 10 #Javascript
微信小程序 wepy框架与iview-weapp的用法详解
Apr 10 #Javascript
解决JQuery的ajax函数执行失败alert函数弹框一闪而过问题
Apr 10 #jQuery
详解Vue源码学习之双向绑定
Apr 10 #Javascript
You might like
PHP 文件上传源码分析(RFC1867)
2009/10/30 PHP
PHP制作用户注册系统
2015/10/23 PHP
CodeIgniter生成静态页的方法
2016/05/17 PHP
记录Yii2框架开发微信公众号遇到的问题及解决方法
2018/07/20 PHP
javascript Onunload与Onbeforeunload使用小结
2009/12/31 Javascript
图像替换新技术 状态域方法
2010/01/28 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
jQuery源码分析-01总体架构分析
2011/11/14 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
JavaScript数据类型详解
2015/04/01 Javascript
使用Web Uploader实现多文件上传
2016/06/08 Javascript
JS实现的自定义显示加载等待图片插件(loading.gif)
2016/06/17 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
js实现下拉菜单效果
2017/03/01 Javascript
Three.js基础学习教程
2017/11/16 Javascript
微信小程序实现搜索功能并跳转搜索结果页面
2019/05/18 Javascript
微信小程序在其他页面监听globalData中值的变化
2019/07/15 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
浅谈v-for 和 v-if 并用时筛选条件方法
2019/11/07 Javascript
JS继承实现方法及优缺点详解
2020/09/02 Javascript
python安装与使用redis的方法
2016/04/19 Python
mysql 之通过配置文件链接数据库
2017/08/12 Python
python将字典内容存入mysql实例代码
2018/01/18 Python
Python流行ORM框架sqlalchemy安装与使用教程
2019/06/04 Python
简单了解Django ORM常用字段类型及参数配置
2020/01/07 Python
python获取栅格点和面值的实现
2020/03/10 Python
python3 正则表达式基础廖雪峰
2020/03/25 Python
python的pip有什么用
2020/06/17 Python
Elemental Herbology官网:英国美容品牌
2019/04/27 全球购物
Jar包的作用是什么
2014/03/30 面试题
介绍一下write命令
2014/08/10 面试题
大学辅导员事迹材料
2014/02/05 职场文书
技术负责人任命书
2014/06/05 职场文书
北京奥运会口号
2014/06/21 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
html中两种获取标签内的值的方法
2022/06/10 HTML / CSS