php仿携程网站,vue模拟携程官网的搭建
仿造携程官网
题外话:
刚开始学前端的时候,有一天看到携程官网.就希望有一天能模拟搭出来.
自己拖拖拉拉的一直没整, 但是但是麻麻我终于完成了!!
(曾经亲爱的同事把传送门删掉了不感谢他了 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模拟携程官网的搭建相关推荐
- HTML5期末大作业:漫画网站设计——布卡漫画官网(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 w学生原创课程设计漫画设计制作大作业成品免费下载
HTML5期末大作业:漫画网站设计--布卡漫画官网(4页) HTML+CSS+JavaScript 学生DW网页设计作业成品 w学生原创课程设计漫画设计制作大作业成品免费下载 常见网页设计作业题材有 ...
- 入职后经常去学习的两个网站和工作生活中经常去的两个网站,分类整理了官网链接随时访问
入职后经常去学习的两个网站和工作生活中经常去的两个网站,分类整理了官网链接随时访问. 一.提升能力 想要升职加薪,首先需要通过自学提升自己的各种能力. 1. edX 提升自己专业能力,主要是让学校里学 ...
- 企业官网模板搭建网站的方法分享
近年来,企业官网的建设成为了一门艺术.企业官网模板是一个很好的展示自己公司形象和产品特色的平台,尤其是对于新成立的公司来说,企业官站是十分重要的,不仅要有足够的实用性和吸引力,还要具备一定的视觉效果 ...
- Vue实现类似Spring官网图片滑动效果
先来看一下Spring官网首页的一个图片滑动显示效果 可以看到, 随着鼠标的滑动,绿色图片和灰色图片可以无缝的在鼠标俩两边切换显示. 显示这样的效果其实很简单,利用固定定位保证两张图片在同一位置下, ...
- HTML学生个人网站作业设计:(宠物官网8页)——bootstarp响应式含有轮播图,响应式页面
⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 公司官网网站 | 企业官网 | 酒店官网 | 等网站的设计与制 ...
- 公司网站源码(公司官网源码)PHP
你有没有想过普通网站和优秀网站之间的区别是什么?好吧,建立一个伟大的网站有一个 7 步过程.它从定义项目开始,规划它,草拟布局,设计和构建网站,测试和优化它,启动它,并以定期维护和更新您的网站结束. ...
- **网站被黑后和官网被入侵更好的处理解决办法
2011年11月11日,Valve Software总裁加布·纽维尔bai向Steam的用户发du送了一篇通知,承认黑客大zhi规模攻击了daoSteam论坛,而且受zhuan到攻击的论坛数据库中,包 ...
- java做的企业网站源码 java开发的公司网站源码 java ssm框架开发的门户网站源码 java 企业官网源代码公司门户网站模板源码带后台SSM框架开发建设
java做的企业网站(源码)java做的企业网站(源码)java做的企业网站(源码) 加Q:464652874 获取下载链接 ************************************* ...
- vue.js 与iview官网
vue.js https://cn.vuejs.org/v2/guide/instance.html#生命周期图示 iview https://www.iviewui.com/components/t ...
最新文章
- TCP短连接产生大量TIME_WAIT导致无法对外建立新TCP连接的原因及解决方法—基础知识篇...
- 树链剖分入门+HYSBZ - 1036树的统计Count
- 异步爬虫-aiohttp库、Twisted库简介
- gz 解压 linux_linux下cpio.gz文件的解压方法
- Spring自动装配方式介绍
- gitlab修改服务器地址,GitLab服务器IP地址设置
- openslide read region 出现黑块 解决办法
- Android 接收和收发短信
- android微信图片选择框架,Android仿微信图片选择器ImageSelector使用详解
- 业财一体化升级设计说明
- 还在手动换IP?大佬们都这样做
- 盘点数据挖掘中常见的5种 AutoEDA 工具
- 台积电台中,建2nm和1nm制程工厂
- 剖析Vue3中setup()的用法(持续更新中)
- Android图片加载框架最全解析(一),app开发入门教程
- 好用的在线调试摄像头的网址
- 桩筏有限元中的弹性板计算_建研院关于桩筏计算几个问题的解答
- 1.2 Architectural Fundamentals
- ARTS-19(C++引用形参,查理芒格的智慧)
- 主成分分析( P C A )
热门文章
- MySQL查询优化详解
- [NOIP] [最短路] NOIP2012Junior 文化之旅 (culture)
- 新AlphaGo首度揭秘:单机运行,4个TPU,算法更强
- M1芯片实现Kail虚拟机(无Parallels)
- 分享十次Android面试经验总结,已收字节,阿里,从三流Android外包到秒杀阿里P7,
- Android程序员需掌握的JVM知识
- 0欧姆电阻、磁珠及电感的作用
- Ubuntu恶意文件分析环境搭建--安装Cuckoo Sandbox记录
- IDEA文档注释(教程+模板)
- mysql kv_KV数据存储:持久化