php仿携程网站,vue模拟携程官网的搭建

news/2024/5/21 0:35:50/文章来源:https://blog.csdn.net/weixin_29920047/article/details/115595467

仿造携程官网

题外话:

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

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

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

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

bVWEhF?w=1440&h=829

目录结构

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

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

bVWEvT?w=260&h=398

build/config配置文件

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

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

思路

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

1.首先是静态页面

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

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

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

包括logo的header

导航栏

icon快捷入口

广告swipe和搜索框

各专题区

底部快捷入口

底部

电梯

fixed的交互框

bVWEy7?w=711&h=466

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

2.然后是页面数据

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

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

bVWEAw?w=799&h=511

然后通过每个需要数据的页面去引入这个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除了图片.还有每个专题区(忽略爱心 - -).

bVWEEq?w=1435&h=831

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

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

结尾

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_739171.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

流量排名前一千万网站,三分之一使用 WordPress

百度智能云域名服务&#xff0c;.com新用户首购仅需25元 WordPress 在官博发文&#xff0c;庆祝它在流量排名前一千万网站中的市场占有率达到了三分之一。据 W3Techs 的数据&#xff0c;WordPress 在前一千万网站的市场份额从一年前的 29.9% 上升到了现在的 33.4%。WordPress…

控制台的左侧显示证书树形列表_产品速递|SSL 证书共享功能上线,赋能网站协同运维...

为了更好的服务 QingCloud 用户&#xff0c;我们推出了『产品速递』栏目&#xff0c;帮助大家梳理青小云家最近上线的新功能和新产品&#xff0c;供大家从中快速选择&#xff0c;得以应用。1SSL 证书共享功能QingCloud SSL 证书管理功能是青云为企业和个人用户提供的一站式 SSL…

Tomcat实现session保持的三种方式、使用msm方式搭建jsp网站

Tomcat简单的来说类似于php的功能&#xff0c;主要实现java程序的编译&#xff0c;最后呈现给用户的是html格式的代码&#xff0c;使用用户可以在浏览器中访问。Tomcat是Java语言研发的&#xff0c;所以依赖于java的虚拟机&#xff08;jvm&#xff09;。 一、使用前端调度器实现…

基于SpringBoot婚纱影楼摄影预约网站

管理员账号/密码&#xff1a;admin/admin 用户账号/密码&#xff1a; matou/123456 ps:管理员登录地址在页面最下面&#xff0c;这个程序是一个很好的模板源码&#xff0c;在不修改一行代码的情况下可以轻松的修改为类似健身俱乐部的网站。 效果截图&#xff1a; 数据库…

基于SpringBoot旅游信息管理系统网站

精美的旅游信息管理系统网站 可以在线预订酒店和景点 部分功能登录后才可以使用 设置的端口号是80端口 启动后访问的网址&#xff1a;http://localhost/travel/ 有会员中心和管理员后台 会员可以注册 管理员账号&#xff1a;admin 密码&#xff1a;admin 修改数据库连接…

基于springboot的购物商城网站

项目描述 Springbootmysql商城系统&#xff08;带后台管理系统&#xff09; 运行环境 jdk8mysqlIntelliJ IDEAmaven 项目技术 springbootmysqlmybatis 效果截图&#xff1a; 账号admin 密码123456 首页地址&#xff1a;http://localhost:8080/Home?actionindex 前台页面…

基于jsp+java+mysql的的家具销售网站

本文讲述了基于B/S模式的java技术的家具在线销售系统的设计与实现。所谓的家具在线销售系统是通过网站推广互联企业的家具和技术服务&#xff0c;并使客户随时可以了解企业和企业的产品&#xff0c;为客户提供在线服务和订单处理功能。 从长期的战略目标来说&#xff0c;家具在…

基于jsp+mysql+Spring+SpringMVC+mybatis的ssm美食菜谱网站系统

本美食菜谱网网站主要包括登录模块、菜谱动态管理模块、菜品地区管理模块、美食信息管理模块、和退出模块等多个模块,采用目前最流行的ssm框架和eclipse编辑器、mysql数据库设计并实现的 。本系统基于SSM(SpringSpringMVCMyBatis)框架,适用于毕业设计&#xff0c;采用javaweb,基…

基于Spring+SpringMVC+MyBatis的服装专卖店网站的设计与实现

基于SpringMVCMyBatis的服装专卖店网站的设计与实现 &#xff08;一&#xff09;基本信息 本项目是二级项目&#xff0c;利用目前较流行的第三方框架&#xff08;BootStrapSpringMVC MyBatis&#xff09;进行开发&#xff0c;数据库服务器使用MySQL&#xff0c;Web服务器使用To…

基于SSM框架的旅游网站

介绍&#xff1a;springspringmvcmybatis三大框架&#xff0c;mysql数据库 功能结构图&#xff1a; 效果截图&#xff1a; 数据库表&#xff1a; CREATE TABLE t_admin ( id int(11) NOT NULL AUTO_INCREMENT, username varchar(100) DEFAULT NULL, password varcha…

基于java的小说网站系统

技术&#xff1a;jsp servlet mysql、 介绍&#xff1a; 打开MyEclipse导入项目&#xff1a; file——import——General——Existing——project——into——Workspace 部署项目到tomcat服务器 启动tomcat服务器&#xff0c;打开浏览器&#xff0c;访问项目 ie打开网址 http:…

基于jsp+java的旅游网站

介绍&#xff1a; jsp&#xff0c;servlet&#xff0c;mysql&#xff0c;Navicat&#xff0c;eclipse 效果截图&#xff1a; 数据库表&#xff1a; CREATE TABLE tab_category ( cid int(11) NOT NULL AUTO_INCREMENT, cname varchar(100) NOT NULL, PRIMARY KEY (cid),…

基于ssm健身俱乐部网站

介绍&#xff1a; eclipse&#xff0c;mysql&#xff0c;spring&#xff0c;springmvc&#xff0c;mybatis 本健身俱乐部网站系统主要包括系统用户管理、新闻数据管理、用户管理、教练管理、器材管理、教室管理、课程安排管理、选课管理、课程管理、会员卡管理、办卡管理等多个…

基于java的动漫网站设计与实现

介绍&#xff1a; jspservletmysqleclipse 本系统将实现以下基本功能&#xff1a; &#xff08;1&#xff09;系统具有简洁大方的页面&#xff0c;使用简便&#xff0c;友好的错误操作提示。 &#xff08;2&#xff09;管理员用户具有图片漫画管理、注册用户管理、评论留言管理…

java短视频播放网站ssm框架

短视频点播系统&#xff0c;必有一个正确的设计思想&#xff0c;通过合理选择数据结构、网络结构、操作系统以及开发环境&#xff0c;构成一个完善的网络体系结构&#xff0c;才能充分发挥计算机信息管理的优势。视频点播系统需要实现的功能包括用户的管理&#xff0c;以及视频…

基于javaweb的课程学习网站

介绍&#xff1a; B/S(Browser /Service )结构&#xff0c;中文译为浏览器和服务器结构。其主要的逻辑在服务器端&#xff08;Service&#xff09;完成&#xff0c;而在浏览器部分只处理非常少的事物逻辑处理。Struts2是一个基于MVC设计模式的Web应用框架&#xff0c;它本质上相…

基于php鲜花花卉销售网站

本系统是为传统经营的花店开通网上销售渠道而开发的&#xff0c;主要满足传统花店运营模式的需求&#xff0c;将销售渠道扩展到网上。通过简单的管理&#xff0c;提供该最终消费者产品的展示、购物、订单处理等。 在线购物操作简单&#xff0c;节约时间&#xff0c;大大的见擒了…

基于php假发销售商城网站

假发销售网站使用php,mysql实现了如用户注册、用户登录、假发商品的预览查询、对假发商品的购买通过购物车实现、可进入留言本留言等等&#xff0c;从而实现了网站与客户之间的交流和沟通。 功能&#xff1a;客户功能和管理员功能两个部分。 设计题目&#xff1a;假发销售网站…

基于php的美食网站

美食本是享受。随着人们生活水平的不断提高。人们越来越重视饮食。寻求味觉的刺激。 因此&#xff0c;本网站就是专为广大吃货提供美食资讯。可以利用它很方便的查到各种美食的介绍信息&#xff0c;实现预定&#xff0c;并且可以提供吃货经验交流。 美食推荐这一话题&#xff0…

基于php的婚庆公司服务网站

整个系统采用了B/S设计结构&#xff0c;利用网络的便捷性和这种模式系统的升级&#xff0c;维护快的特点&#xff0c;实现系统模块的各个功能。本系统是在WINDOWS XP系统环境下开发的&#xff0c;系统主要采用php&#xff0c;mysql数据库进行设计&#xff0c;同时相应的使用Dre…