仿造携程官网

题外话:

刚开始学前端的时候,有一天看到携程官网.就希望有一天能模拟搭出来.

自己拖拖拉拉的一直没整, 但是但是麻麻我终于完成了!!

(曾经亲爱的同事把传送门删掉了不感谢他了 fk)

感谢叶师兄拯救了我携程携程 源码仿携程源码

目录结构

基于vue+less进行开发,配合强行在携程复制的数据搭建的网站

目录是基于vue-cli的基础下搭建的.

build/config配置文件

src是主要内容(assets包括公用的js文件,css样式/components是公用组件/module是页面)

dist是打包后的文件夹 node_modules是依赖包 其他就是默认的配置文件

思路

小小讲一下自己拿到携程官网的时候是怎么拆开的(如果写的不对请麻烦各位指出指导)

1.首先是静态页面

刚刚学前端的时候 看到携程网就乱拳敲打.一点点html css强写,

后面工作的原因用了vue,就推倒旧的重新写了.

页面结构是分为这几块:(如图)

包括logo的header

导航栏

icon快捷入口

广告swipe和搜索框

各专题区

底部快捷入口

底部

电梯

fixed的交互框

有页面结构之后.就是基本功了.然后一点点搭页面, (优化把公用组件抽出来.)

2.然后是页面数据

哎,没想到好的办法.就搭页面的时候,顺便在携程网上面一点点的copy下来.

(我看隔壁的仿页面贴都是通过接口的.小弟还是菜了点)

然后通过每个需要数据的页面去引入这个mock.js...

3.样式

普通的页面样式就不说啦.大家慢慢搭就好.

share一些less的mixin方法.

// display vertical集合

#display_type{

.dsp-middle{

display: inline-block;

vertical-align: middle;

}

.dsp-top{

display: inline-block;

vertical-align: top;

}

}

// 三角形(向下)

.arrow_down(@size, @color: black){

//@size大小 @color颜色

margin-left: 5px;

&:after{

content: '';

display: inline-block;

border-top: @size solid @color;

border-left: @size solid transparent;

border-right: @size solid transparent;

border-bottom: @size solid transparent;

}

}

用的比较多的2个mixin就是上面这2个.一个是display的做布局使用, 一个是人工三角形orz.

如果想要用mixin的时候,需要在css中用@import的方法引入才能用.(用js的方式,破了好久破不了放弃)

引入之后直接在页面里面使用即可

#display_type > .dsp-middle 或另外一个;

.arrow_down(3px, #fff);

4.响应式布局

因为我的样式是通过less写的.

那就看着携程官网.一点点测试.一点点完善咯.没啥好办法.

部分代码如下.

@media screen and (max-width: 1200px){

margin-right: 20px;

&:last-child{

display: none;

}

}

5.电梯

这个电梯是存在于专题区里面的,所以我给每个专题的div添加了一个不用的类名,用来获取当前div的滚动高度.

然后在钩子函数mounted()里面,去获取各个专题的高度

const s = document.getElementsByClassName('scroll-hook');

for(let dom of s){

let scoll_h = dom.offsetTop + dom.offsetParent.offsetTop;

this.scroll_data.push(scoll_h);

}

电梯的精髓就是在:

根据当前的滚动高度,然后动态改变active的标识;

点击对应的标识,页面会滚到对应的区域;

页面滚动的时候,在某个固定的位置待着

那么就对应的写bie.

1.电梯的html渲染(ps. lift.index是每一个电梯的类名, lift_flag是区域的标识),然后在mounted()里给window注册一个scroll的监听事件,然后去获取当前的滚动高度,然后进行判断

  • class="lift-item"

    :class="[lift.index, {'lift-active': (lift_index === lift_flag)}]"

    v-for="(lift,lift_index) in d"

    @click="lift_click(lift_index)">

    {{lift.name}}

2.点击滚动,写了一个原生的笨方法,(document.dEl那有一个兼容问题)

//页面滚动方法

function page_scroll_to(cur, tar){

/*

params:

cur 当前高度

tar 目标高度

*/

var during = 10; //持续时间(ms)

var times = 20; //持续次数

var i = 1; //持续标识

var s_flag;

if(cur < tar){

var s = (tar - cur) / times; //滚动距离

s_flag = setInterval(() => {

//解决兼容性问题(原本使用documentElement即可)

document.documentElement.scrollTop = cur + s * i;

document.body.scrollTop = cur + s * i;

i++;

if(i>times){

clearInterval(s_flag);

}

}, during)

}

else{

var s = (cur - tar) / times;

s_flag = setInterval(() => {

//解决兼容性问题

document.documentElement.scrollTop = cur - s * i;

document.body.scrollTop = cur - s * i;

i++;

if(i>times){

clearInterval(s_flag);

}

}, during)

}

}

3.样式我是直接copy携程的. 滑动高度呢就根据滚动高度去计算, 然后用js给电梯的div写一个内联样式,动态的去改变

6.throttle事件

因为给window注册了一个scroll事件,当你一滚动,会疯狂触发scroll,可能在线上的会导致浏览器有压力(猜的)

所以自己写了一个throttle方法去优化这一块,

然后在vue的原型对象中注册了一下,可以在后续直接this.throttle只用

function throttle(fn, delay, context) {

/*

throttle函数(每delay时间,触发一次fn函数)

param:

fn 执行函数

delay 持续时间(ms)

context 作用域

*/

var last;

//定时器

var timer;

return function(){

//获取当前的毫秒数

var now = +new Date();

//判断时间

if(last && now < last + delay){

clearTimeout(timer);

timer = setTimeout(function() {

last = now;

fn.apply(context);

}, delay)

}

else{

last = now;

fn.apply(context);

}

}

}

Vue.prototype.throttle = throttle;

7.lazyload

页面大了一进入就触发全部的请求,肯定不那么棒,所以此处引入了lazyload.

携程的lazyload除了图片.还有每个专题区(忽略爱心 - -).

ps.最开始引用了vue-lazyload这个模块,然后里面有一个lazyComponent配置项,可以用来设置一整块的,但是这个有一个不足的地方,就是当你页面在比较下面的时候去刷新, lazyComponent只会update当前可视区域的部分,可视区域上面的区域就不管你........

pss.所以我自己通过上面的电梯,自己写了一个,然后将flag标识通过组件之间传入,然后组件内部通过watch去监控.然后动态从初始化状态更新为内容区.

结尾

其实就是一个普通的页面搭建,大家如果有空其实一点点就能搭出来的,

不知道强行分享的东西有没有更好的方法呢,如果有麻烦各位指导一下小弟.

以上完毕,感谢大家感谢大家.(如果侵权了,马上下架,仅供交流学习)

最后最后,携程在手,说走就走.

php仿携程网站,vue模拟携程官网的搭建相关推荐

  1. HTML5期末大作业:漫画网站设计——布卡漫画官网(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 w学生原创课程设计漫画设计制作大作业成品免费下载

    HTML5期末大作业:漫画网站设计--布卡漫画官网(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 w学生原创课程设计漫画设计制作大作业成品免费下载 常见网页设计作业题材有 ...

  2. 入职后经常去学习的两个网站和工作生活中经常去的两个网站,分类整理了官网链接随时访问

    入职后经常去学习的两个网站和工作生活中经常去的两个网站,分类整理了官网链接随时访问. 一.提升能力 想要升职加薪,首先需要通过自学提升自己的各种能力. 1. edX 提升自己专业能力,主要是让学校里学 ...

  3. 企业官网模板搭建网站的方法分享

    ​近年来,企业官网的建设成为了一门艺术.企业官网模板是一个很好的展示自己公司形象和产品特色的平台,尤其是对于新成立的公司来说,企业官站是十分重要的,不仅要有足够的实用性和吸引力,还要具备一定的视觉效果 ...

  4. Vue实现类似Spring官网图片滑动效果

    先来看一下Spring官网首页的一个图片滑动显示效果 可以看到, 随着鼠标的滑动,绿色图片和灰色图片可以无缝的在鼠标俩两边切换显示. 显示这样的效果其实很简单,利用固定定位保证两张图片在同一位置下, ...

  5. HTML学生个人网站作业设计:(宠物官网8页)——bootstarp响应式含有轮播图,响应式页面

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 ...

  6. 公司网站源码(公司官网源码)PHP

    你有没有想过普通网站和优秀网站之间的区别是什么?好吧,建立一个伟大的网站有一个 7 步过程.它从定义项目开始,规划它,草拟布局,设计和构建网站,测试和优化它,启动它,并以定期维护和更新您的网站结束. ...

  7. **网站被黑后和官网被入侵更好的处理解决办法

    2011年11月11日,Valve Software总裁加布·纽维尔bai向Steam的用户发du送了一篇通知,承认黑客大zhi规模攻击了daoSteam论坛,而且受zhuan到攻击的论坛数据库中,包 ...

  8. java做的企业网站源码 java开发的公司网站源码 java ssm框架开发的门户网站源码 java 企业官网源代码公司门户网站模板源码带后台SSM框架开发建设

    java做的企业网站(源码)java做的企业网站(源码)java做的企业网站(源码) 加Q:464652874 获取下载链接 ************************************* ...

  9. vue.js 与iview官网

    vue.js https://cn.vuejs.org/v2/guide/instance.html#生命周期图示 iview https://www.iviewui.com/components/t ...

最新文章

  1. TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇...
  2. 树链剖分入门+HYSBZ - 1036树的统计Count
  3. 异步爬虫-aiohttp库、Twisted库简介
  4. gz 解压 linux_linux下cpio.gz文件的解压方法
  5. Spring自动装配方式介绍
  6. gitlab修改服务器地址,GitLab服务器IP地址设置
  7. openslide read region 出现黑块 解决办法
  8. Android 接收和收发短信
  9. android微信图片选择框架,Android仿微信图片选择器ImageSelector使用详解
  10. 业财一体化升级设计说明
  11. 还在手动换IP?大佬们都这样做
  12. 盘点数据挖掘中常见的5种 AutoEDA 工具
  13. 台积电台中,建2nm和1nm制程工厂
  14. 剖析Vue3中setup()的用法(持续更新中)
  15. Android图片加载框架最全解析(一),app开发入门教程
  16. 好用的在线调试摄像头的网址
  17. 桩筏有限元中的弹性板计算_建研院关于桩筏计算几个问题的解答
  18. 1.2 Architectural Fundamentals
  19. ARTS-19(C++引用形参,查理芒格的智慧)
  20. 主成分分析( P C A )

热门文章

  1. MySQL查询优化详解
  2. [NOIP] [最短路] NOIP2012Junior 文化之旅 (culture)
  3. 新AlphaGo首度揭秘:单机运行,4个TPU,算法更强
  4. M1芯片实现Kail虚拟机(无Parallels)
  5. 分享十次Android面试经验总结,已收字节,阿里,从三流Android外包到秒杀阿里P7,
  6. Android程序员需掌握的JVM知识
  7. 0欧姆电阻、磁珠及电感的作用
  8. Ubuntu恶意文件分析环境搭建--安装Cuckoo Sandbox记录
  9. IDEA文档注释(教程+模板)
  10. mysql kv_KV数据存储:持久化