记一次用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 相关文章推荐
新浪中用来显示flash的函数
Apr 02 Javascript
JavaScript 模仿vbs中的 DateAdd() 函数的代码
Aug 13 Javascript
jQuery 入门级学习笔记及源码
Jan 22 Javascript
jquery 简单的进度条实现代码
Mar 11 Javascript
JavaScript高级程序设计 客户端存储学习笔记
Sep 10 Javascript
JSP跨iframe如何传递参数实现代码
Sep 21 Javascript
js数组常见操作及数组与字符串相互转化实例详解
Nov 10 Javascript
使用jQuery的toggle()方法对HTML标签进行显示、隐藏的方法(示例)
Sep 01 Javascript
js实现右键自定义菜单
Dec 03 Javascript
原生js实现新闻列表展开/收起全文功能
Jan 20 Javascript
AngularJS全局警告框实现方法示例
May 18 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 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
DedeCms模板安装/制作概述
2007/03/11 PHP
ThinkPHP模板判断输出Empty标签用法详解
2014/06/30 PHP
async和DOM Script文件加载比较
2014/07/20 PHP
PHP实现QQ登录实例代码
2016/01/14 PHP
js 编写规范
2010/03/03 Javascript
javascript AOP 实现ajax回调函数使用比较方便
2010/11/20 Javascript
8 行 Node.js 代码实现代理服务器
2016/12/05 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
单行 JS 实现移动端金钱格式的输入规则
2017/05/22 Javascript
js学习总结_基于数据类型检测的四种方式(必看)
2017/07/04 Javascript
Vue插件从封装到发布的完整步骤记录
2019/02/28 Javascript
Vue使用Canvas绘制图片、矩形、线条、文字,下载图片
2019/04/26 Javascript
一文读懂ES7中的javascript修饰器
2019/05/06 Javascript
vue-cli3中vue.config.js配置教程详解
2019/05/29 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
JavaScript实现简易聊天对话框(加滚动条)
2020/02/10 Javascript
[03:24]2014DOTA2国际邀请赛 神秘商店生意火爆
2014/07/18 DOTA
Python分析学校四六级过关情况
2017/11/22 Python
Python实现的直接插入排序算法示例
2018/04/29 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
Django 表单模型选择框如何使用分组
2019/05/16 Python
pandas实现将dataframe满足某一条件的值选出
2019/06/12 Python
解决TensorFlow模型恢复报错的问题
2020/02/06 Python
python进度条显示之tqmd模块
2020/08/22 Python
使用数据结构给女朋友写个Html5走迷宫游戏
2019/11/26 HTML / CSS
暇步士官网:Hush Puppies
2016/09/22 全球购物
安全责任协议书
2014/04/21 职场文书
关工委先进个人事迹材料
2014/05/23 职场文书
夫妻忠诚协议范文
2014/11/16 职场文书
司机岗位职责范本
2015/04/10 职场文书
行政人事主管岗位职责
2015/04/11 职场文书
2015年幼儿园保育员工作总结
2015/04/23 职场文书
幼儿园亲子活动通知
2015/04/24 职场文书
乔迁新居祝福语
2019/11/04 职场文书
浅谈Python numpy创建空数组的问题
2021/05/25 Python