记一次用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 相关文章推荐
js不是基础的基础
Dec 24 Javascript
一个tab标签切换效果代码
Mar 27 Javascript
javascipt基础内容--需要注意的细节
Apr 10 Javascript
创建、调用JavaScript对象的方法集锦
Dec 24 Javascript
jQuery插件Slider Revolution实现响应动画滑动图片切换效果
Jun 05 Javascript
jQuery实现连续动画效果实例分析
Oct 09 Javascript
JS实现多物体运动的方法详解
Jan 23 Javascript
Vue 数组和对象更新,但是页面没有刷新的解决方式
Nov 09 Javascript
原生js无缝轮播插件使用详解
Mar 09 Javascript
es6函数中的作用域实例分析
Apr 18 Javascript
vue制作toast组件npm包示例代码
Oct 29 Javascript
关于vue中如何监听数组变化
Apr 28 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
IStream与TStream之间的相互转换
2008/08/01 PHP
php URL编码解码函数代码
2009/03/10 PHP
PHP使用Alexa API获取网站的Alexa排名例子
2014/06/12 PHP
php使用MySQL保存session会话的方法
2015/06/18 PHP
Laravel 读取 config 下的数据方法
2019/10/13 PHP
通用于ie和firefox的函数 GetCurrentStyle (obj, prop)
2006/12/27 Javascript
Prototype中dom对象方法汇总
2008/09/17 Javascript
js替换字符串的所有示例代码
2013/07/23 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
javascript框架设计读书笔记之种子模块
2014/12/02 Javascript
限制上传文件大小和格式的jQuery插件实例
2015/01/24 Javascript
60行js代码实现俄罗斯方块
2015/03/31 Javascript
js实现支持手机滑动切换的轮播图片效果实例
2015/04/29 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
js实现上传文件添加和删除文件选择框
2016/10/24 Javascript
jquery实现图片列表鼠标移入微动
2016/12/01 Javascript
Javascript 链式作用域详细介绍
2017/02/23 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
2017/08/23 Javascript
JavaScript学习总结(一) ECMAScript、BOM、DOM(核心、浏览器对象模型与文档对象模型)
2018/01/07 Javascript
微信小程序云开发 生成带参小程序码流程
2019/05/18 Javascript
Node 代理访问的实现
2019/09/19 Javascript
Vue通过WebSocket建立长连接的实现代码
2019/11/05 Javascript
浅析Vue下的components模板使用及应用
2019/11/27 Javascript
python检测lvs real server状态
2014/01/22 Python
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
利用Python爬取可用的代理IP
2016/08/18 Python
Python利用matplotlib生成图片背景及图例透明的效果
2017/04/27 Python
python对excel文档去重及求和的实例
2018/04/18 Python
python实现输入任意一个大写字母生成金字塔的示例
2019/10/27 Python
django模型类中,null=True,blank=True用法说明
2020/07/09 Python
python pillow库的基础使用教程
2021/01/13 Python
台湾流行服饰购物平台:OB严选
2018/01/21 全球购物
戴尔新加坡官网:Dell Singapore
2020/12/13 全球购物
linux面试题参考答案(9)
2015/01/07 面试题
禁止酒驾标语
2014/06/25 职场文书
社团招新宣传语
2015/07/13 职场文书