记一次用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 相关文章推荐
使Ext的Template可以解析二层的json数据的方法
Dec 22 Javascript
jquery实现表格奇数偶数行不同样式(有图为证及实现代码)
Jan 23 Javascript
瀑布流布局并自动加载实现代码
Mar 12 Javascript
javascript在网页中实现读取剪贴板粘贴截图功能
Jun 07 Javascript
JavaScript使用function定义对象并调用的方法
Mar 23 Javascript
jQuery表格插件datatables用法汇总
Mar 29 Javascript
jstree创建无限分级树的方法【基于ajax动态创建子节点】
Oct 25 Javascript
etmvc+jQuery EasyUI+combobox多值操作实现角色授权实例
Nov 09 Javascript
bootstrap使用validate实现简单校验功能
Dec 02 Javascript
详解让sublime text3支持Vue语法高亮显示的示例
Sep 29 Javascript
vue富文本框(插入文本、图片、视频)的使用及问题小结
Aug 17 Javascript
详解Vue实战指南之依赖注入(provide/inject)
Nov 13 Javascript
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程序员最常犯的11个MySQL错误小结
2010/11/20 PHP
通过PHP的内置函数,通过DES算法对数据加密和解密
2012/06/21 PHP
浅谈PHP变量作用域以及地址引用问题
2013/12/27 PHP
php检索或者复制远程文件的方法
2015/03/13 PHP
PHP如何将图片文件上传到另外一台服务器上
2019/08/26 PHP
PHP使用gearman进行异步的邮件或短信发送操作详解
2020/02/27 PHP
监控 url fragment变化的js代码
2010/04/19 Javascript
js 文件引入实现代码
2010/04/23 Javascript
DOM_window对象属性之--clipboardData对象操作代码
2011/02/03 Javascript
JS 模态对话框和非模态对话框操作技巧汇总
2013/04/15 Javascript
js加入收藏以及使用Jquery更改透明度
2014/01/26 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
在JavaScript中使用JSON数据
2016/02/15 Javascript
利用Node.JS实现邮件发送功能
2016/10/21 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
浅谈EasyUI常用控件的禁用方法
2016/11/09 Javascript
JavaScript的兼容性与调试技巧
2016/11/22 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
js获取文件里面的所有文件名(实例)
2017/10/17 Javascript
微信小程序实现手势滑动效果
2019/08/26 Javascript
vue项目配置同一局域网可使用ip访问的操作
2020/10/23 Javascript
[43:57]LGD vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
python使用cookielib库示例分享
2014/03/03 Python
python之消除前缀重命名的方法
2018/10/21 Python
如何利用Boost.Python实现Python C/C++混合编程详解
2018/11/08 Python
Python随机生成身份证号码及校验功能
2018/12/04 Python
详解Python3 pandas.merge用法
2019/09/05 Python
Canvas获取视频第一帧缩略图的实现
2020/11/11 HTML / CSS
《七颗钻石》教学反思
2014/02/28 职场文书
岗位职责怎么写
2014/03/14 职场文书
医药销售自我评价200字
2014/09/11 职场文书
2015年员工工作表现评语
2015/03/25 职场文书
2015年小学体育教师工作总结
2015/10/23 职场文书
公司员工违法违章行为检讨书
2019/06/24 职场文书
python中requests库+xpath+lxml简单使用
2021/04/29 Python