记一次用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 相关文章推荐
jquery对元素拖动排序示例
Jan 16 Javascript
在JS中如何调用JSP中的变量
Jan 22 Javascript
js鼠标滑过图片震动特效的方法
Feb 17 Javascript
JavaScript制作windows经典扫雷小游戏
Mar 31 Javascript
javascript多行字符串的简单实现方式
May 04 Javascript
如何获取元素的最终background-color
Feb 06 Javascript
jquery dataTable 获取某行数据
May 05 jQuery
vuejs使用递归组件实现树形目录的方法
Sep 30 Javascript
微信小程序表单验证功能完整实例
Dec 01 Javascript
vue 插值 v-once,v-text, v-html详解
Jan 19 Javascript
搭建element-ui的Vue前端工程操作实例
Feb 23 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
Sep 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 函数call_user_func和call_user_func_array用法详解
2014/03/02 PHP
php+mysqli实现批量执行插入、更新及删除数据的方法
2015/01/29 PHP
php邮件发送的两种方式
2020/04/28 PHP
PHP curl模拟登录带验证码的网站
2015/11/30 PHP
加载 Javascript 最佳实践
2011/10/30 Javascript
javascript实现信息的显示和隐藏如注册页面
2013/12/03 Javascript
JS获取随机数函数可自定义最小值最大值
2014/05/08 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
AngularJS入门教程之Cookies读写操作示例
2016/11/02 Javascript
BootStrap中jQuery插件Carousel实现轮播广告效果
2017/03/27 jQuery
vue实现todolist单页面应用
2017/04/11 Javascript
微信小程序开发之toast等弹框提示使用教程
2017/06/08 Javascript
jQuery实现页码跳转式动态数据分页
2017/12/31 jQuery
vue组件是如何解析及渲染的?
2021/01/13 Vue.js
使用原生javascript开发计算器实例代码
2021/02/21 Javascript
从零学python系列之数据处理编程实例(二)
2014/05/22 Python
进一步探究Python中的正则表达式
2015/04/28 Python
python处理html转义字符的方法详解
2016/07/01 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
python merge、concat合并数据集的实例讲解
2018/04/12 Python
详解Django 时间与时区设置问题
2019/07/23 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
详解python tkinter模块安装过程
2020/01/06 Python
python 常见的排序算法实现汇总
2020/08/21 Python
用html5的canvas和JavaScript创建一个绘图程序的简单实例
2016/07/06 HTML / CSS
曼联官方网上商店:Manchester United Direct
2017/07/28 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
C++:局部变量能否和全局变量重名
2014/03/03 面试题
教师自我评价范例
2013/09/24 职场文书
称象教学反思
2014/02/03 职场文书
公司财务流程之主管工作流程
2014/03/03 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
整脏治乱工作简报
2015/07/21 职场文书
2015年小学实验室工作总结
2015/07/28 职场文书
Python基础之赋值,浅拷贝,深拷贝的区别
2021/04/30 Python
PyTorch device与cuda.device用法
2022/04/03 Python