记一次用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实现画板的代码
Sep 05 Javascript
jQuery 对象中的类数组操作
Apr 27 Javascript
IE无法设置短域名下Cookie
Sep 23 Javascript
jquery移动端TAB触屏切换实现效果
Dec 22 Javascript
jQuery代码实现对话框右上角菜单带关闭×
May 03 Javascript
一个Js文件函数中调用另一个Js文件函数的方法演示
Aug 14 Javascript
js实现图片放大展示效果
Aug 30 Javascript
node.JS二进制操作模块buffer对象使用方法详解
Feb 06 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
Aug 10 Javascript
基于JavaScript实现简单的轮播图
Mar 03 Javascript
Vue-Element-Admin集成自己的接口实现登录跳转
Jun 23 Vue.js
javascript数组includes、reduce的基本使用
Jul 02 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做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
PHP生成UTF8文件的方法
2010/05/15 PHP
PHP函数microtime()用法与说明
2013/12/04 PHP
php实现的支持imagemagick及gd库两种处理的缩略图生成类
2014/09/23 PHP
禁止刷新,回退的JS
2006/11/25 Javascript
Jquery实现的tab效果可以指定默认显示第几页
2013/10/16 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
一个html5播放视频的video控件只支持android的默认格式mp4和3gp
2014/05/08 Javascript
wangEditor编辑器失去焦点后仍然可以在原位置插入图片分析
2015/05/06 Javascript
非常棒的jQuery图片轮播效果
2016/04/17 Javascript
Bootstrap3制作自己的导航栏
2016/05/12 Javascript
关于页面刷新vuex数据消失问题解决方案
2017/07/03 Javascript
Windows下快速搭建NodeJS本地服务器的步骤
2017/08/09 NodeJs
Angular实现的日程表功能【可添加及隐藏显示内容】
2017/12/27 Javascript
jQuery中图片展示插件highslide.js的简单dom
2018/04/22 jQuery
jQuery实现模糊查询的方法分析
2018/05/10 jQuery
ES6 Object.assign()的用法及其使用
2020/01/18 Javascript
[36:13]Mineski vs iG 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
Python中字典(dict)合并的四种方法总结
2017/08/10 Python
一篇文章快速了解Python的GIL
2018/01/12 Python
python判断文件夹内是否存在指定后缀文件的实例
2019/06/10 Python
Python3变量与基本数据类型用法实例分析
2020/02/14 Python
如何基于线程池提升request模块效率
2020/04/18 Python
给ubuntu18安装python3.7的详细教程
2020/06/08 Python
python爬虫使用scrapy注意事项
2020/11/23 Python
css3新单位vw、vh的使用教程
2018/03/23 HTML / CSS
欧洲有机婴儿食品最大的市场:Organic Baby Food(供美国和加拿大)
2018/03/28 全球购物
教职工代表大会主持词
2014/04/01 职场文书
幼儿园迎国庆65周年活动策划方案
2014/09/16 职场文书
2014年体育教师工作总结
2014/12/03 职场文书
巴黎圣母院读书笔记
2015/06/26 职场文书
新闻发布会新闻稿
2015/07/17 职场文书
Python insert() / append() 用法 Leetcode实战演示
2021/03/31 Python
详解Python常用的魔法方法
2021/06/03 Python
详解NodeJS模块化
2021/06/15 NodeJs