记一次用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 DOM学习第八章 表单错误提示
Feb 19 Javascript
IE中createElement需要注意的一个问题
Jul 13 Javascript
JQuery之focus函数使用介绍
Aug 20 Javascript
JS事件在IE与FF中的区别详细解析
Nov 20 Javascript
js实现鼠标经过时图片滚动停止的方法
Feb 16 Javascript
谈一谈JS消息机制和事件机制的理解
Apr 14 Javascript
javascript深拷贝(deepClone)详解
Aug 24 Javascript
微信小程序 wxapp内容组件 text详细介绍
Oct 31 Javascript
angularjs实现table表格td单元格单击变输入框/可编辑状态示例
Feb 21 Javascript
js实现橱窗展示效果
Jan 11 Javascript
原生JavaScript之es6中Class的用法分析
Feb 23 Javascript
JavaScript原生数组函数实例汇总
Oct 14 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中计算中文字符串长度、截取中文字符串的函数代码
2011/08/09 PHP
PHP cURL初始化和执行方法入门级代码
2015/05/28 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
Prototype Function对象 学习
2009/07/12 Javascript
jQuery1.5.1 animate方法源码阅读
2011/04/05 Javascript
jBox 2.3基于jquery的最新多功能对话框插件 常见使用问题解答
2011/11/10 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
js中键盘事件实例简析
2015/01/10 Javascript
用js编写的简单的计算器代码程序
2015/08/04 Javascript
js实现select跳转菜单新窗口效果代码分享(超简单)
2015/08/21 Javascript
详解Angular开发中的登陆与身份验证
2016/07/27 Javascript
解析NodeJs的调试方法
2016/12/11 NodeJs
jQuery实现简易的输入框字数计数功能示例
2017/01/16 Javascript
video.js使用改变ui过程
2017/03/05 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
Vue2.0学习之详解Vue 组件及父子组件通信
2017/12/12 Javascript
vue 使用rules对表单字段进行校验的步骤
2020/12/25 Vue.js
利用Anaconda完美解决Python 2与python 3的共存问题
2017/05/25 Python
用十张图详解TensorFlow数据读取机制(附代码)
2018/02/06 Python
Python 中Pickle库的使用详解
2018/02/24 Python
Numpy掩码式数组详解
2018/04/17 Python
python图形用户接口实例详解
2019/12/16 Python
使用Python合成图片的实现代码(图片添加个性化文本,图片上叠加其他图片)
2020/04/30 Python
利用三角函数在canvas上画虚线的方法
2018/01/11 HTML / CSS
Canvas高级路径操作之拖拽对象的实现
2019/08/05 HTML / CSS
HTML5拖拽文件上传的示例代码
2021/03/04 HTML / CSS
英国网上自行车商店:Tredz Bikes
2019/10/29 全球购物
初中校园之声广播稿
2014/01/15 职场文书
总经理任命书范本
2014/06/05 职场文书
就业意向书
2014/07/29 职场文书
我的梦想演讲稿1000字
2014/08/21 职场文书
庆祝新中国成立65周年“向国旗敬礼”网上签名寄语
2014/09/27 职场文书
党员个人剖析材料
2014/09/30 职场文书
2014办公室年度工作总结
2014/12/09 职场文书
语文复习计划
2015/01/19 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书