记一次用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高级程序设计(第3版)学习笔记9 js函数(下)
Oct 11 Javascript
js中精确计算加法和减法示例
Mar 28 Javascript
zepto与jquery的区别及zepto的不同使用8条小结
Jul 28 Javascript
网络传输协议(http协议)
Nov 18 Javascript
文件上传的几个示例分享【推荐】
Dec 16 Javascript
jquery中用函数来设置css样式
Dec 22 Javascript
Javascript中return的使用与闭包详解
Jan 11 Javascript
微信小程序 定位到当前城市实现实例代码
Feb 23 Javascript
微信小程序-滚动消息通知的实例代码
Aug 03 Javascript
vuex直接赋值的三种方法总结
Sep 16 Javascript
webpack配置proxyTable时pathRewrite无效的解决方法
Dec 13 Javascript
javascript实现图片轮播代码
Jul 09 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
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
新浪SAE云平台下使用codeigniter的数据库配置
2014/06/12 PHP
PHP chop()函数讲解
2019/02/11 PHP
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
javascript不同类型数据之间的运算的转换方法
2014/02/13 Javascript
javascript递归回溯法解八皇后问题
2015/04/22 Javascript
Vue-Cli中自定义过滤器的实现代码
2017/08/12 Javascript
hammer.js实现图片手势放大效果
2017/08/29 Javascript
vue 每次渲染完页面后div的滚动条保持在最底部的方法
2018/03/17 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
jQuery 操作 HTML 元素和属性的方法
2018/11/12 jQuery
vue-router源码之history类的浅析
2019/05/21 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
python获取Linux下文件版本信息、公司名和产品名的方法
2014/10/05 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
Python爬虫包BeautifulSoup异常处理(二)
2018/06/17 Python
Django unittest 设置跳过某些case的方法
2018/12/26 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
实例详解Matlab 与 Python 的区别
2019/04/26 Python
基于pytorch padding=SAME的解决方式
2020/02/18 Python
Python selenium键盘鼠标事件实现过程详解
2020/07/28 Python
Python-split()函数实例用法讲解
2020/12/18 Python
英国No.1文具和办公用品在线:Euroffice
2016/09/21 全球购物
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
Harman Audio官方商店:购买JBL、Harman Kardon、Infinity和AKG
2019/12/05 全球购物
中文系师范生自荐信
2013/10/01 职场文书
英语道歉信范文
2014/01/09 职场文书
幼儿园优秀教师事迹
2014/02/13 职场文书
服务标语口号
2014/07/01 职场文书
公司合作协议范文
2014/10/01 职场文书
个人总结格式范文
2015/03/09 职场文书
2015年环卫工作总结
2015/04/28 职场文书
幼师辞职信范文大全
2015/05/12 职场文书
黑白记忆观后感
2015/06/18 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android