【jq+css+html】移动web案例课美团外卖

在这里插入图片描述
在这里插入图片描述
首页

<!DOCTYPE html>
<html>
<head>
    <title>首页</title>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
    <script type="text/javascript">
        (function(){
            var docEl = document.documentElement

            // set 1rem = viewWidth / 10
            function setRemUnit () {
                var rem = docEl.clientWidth / 10;
                docEl.style.fontSize = rem + 'px';
            }

            setRemUnit()

            // reset rem unit on page resize
            window.addEventListener('resize', setRemUnit)
            window.addEventListener('pageshow', function (e) {
            if (e.persisted) {
                setRemUnit()
            }
            });
        })();
    </script>
    <link rel="stylesheet" type="text/css" href="../lib/reset.css">
    <link rel="stylesheet" type="text/css" href="./header/header.css">
    <link rel="stylesheet" type="text/css" href="./searchBar/searchBar.css">
    <link rel="stylesheet" type="text/css" href="./category/category.css">
    <link rel="stylesheet" type="text/css" href="./starScore/starScore.css">
    <link rel="stylesheet" type="text/css" href="./contentList/contentList.css">
    <link rel="stylesheet" type="text/css" href="../common/bottomBar/bottomBar.css">

</head>
<body>
    <!--头部开始-->
    <div class="header">
        <div class="search-bar">
        <div class="bar-location">
            <div class="location-icon"></div>
            <div class="location-text">郑州市</div>
        </div>
        <div class="search-btn">
            <p class="place-holder">鸡翅</p>
        </div>
        </div>
        <img class="banner-img" src="http://xs01.meituan.net/waimai_i/img/bannertemp.e8a6fa63.jpg">
    </div>
    <!--头部结束-->
    <!--类目开始-->
    <div class="category-content clearfix"></div>
    <!--类目结束-->
    <!--商家列表开始-->
    <div class="list-content">
        <h4 class="list-title">
            <span class="title-line"></span>
            <span>附近商家</span>
            <span class="title-line"></span>
        </h4>
        <div class="list-wrap">
            
        </div>
        
    </div>
    <!--商家列表结束-->
    <!--底部栏-->
    <div class="bottom-bar">
    </div>
    <!--底部栏-->
    <script type="text/javascript" src="../lib/jquery.min.js"></script>
    <script type="text/javascript" src="./category/category.js"></script>
    <script type="text/javascript" src="./starScore/starScore.js"></script>
    <script type="text/javascript" src="./contentList/contentList.js"></script>
    <script type="text/javascript" src="../common/bottomBar/bottomBar.js"></script>
</body>
</html>

底部


(function(){


    var itemTmpl = '<a class="$key btn-item" href="$key.html"><div class="tab-icon"></div><div class="btn-name">$text</div></a>';


    function init(){
        var items = [{
            key: 'index',
            text: '首页'
        },{
            key: 'order',
            text: '订单'
        },{
            key: 'my',
            text: '我的'
        }];

        var str = '';

        items.forEach(function(item, index){
            str += itemTmpl.replace('$key',item.key)
                    .replace('$text',item.text);
        });

        $('.bottom-bar').append(str);

        var arr = window.location.pathname.split('/');
        var page = arr[arr.length-1].replace('.html','');

        $('a.'+page).addClass('active');
    }


    init();



})();

类目

(function(){
    // category类目
    var itemTmpl = '<div class="category-item">'+
                        '<img class="item-icon" src=$url />'+
                        '<p class="item-name">$name</p>'+
                    '</div>';

    function initCategory(argument) {
        $.get('../json/head.json', function(data){
            console.log(data);
            var list = data.data.primary_filter.splice(0,8);
            list.forEach(function(item, index){
                var str = itemTmpl.replace('$url',item.url).
                replace('$name',item.name);


                $('.category-content').append(str);

            });
        });
    }


    function addClick(){
        $('.category-content').on('click','.category-item', function(){
            alert(1);
        });
    }


    function init(argument) {
        initCategory();
        addClick();
    }


    init();
})();

contentList


(function(){
    // 商家详情模版
    var itemTmpl = '<div class="r-item-content scale-1px">'+
                        '<img class="item-img" src=$pic_url />'+
                        '$brand'+
                        '<div class="item-info-content">'+
                            '<p class="item-title">$name</p>'+
                            '<div class="item-desc clearfix">'+
                               '<div class="item-score">$wm_poi_score</div>'+
                               '<div class="item-count">月售$monthNum</div>'+
                               '<div class="item-distance">&nbsp;$distance</div>'+
                                '<div class="item-time">$mt_delivery_time&nbsp;|</div>'+
                            '</div>'+
                            '<div class="item-price">'+
                                '<div class="item-pre-price">$min_price_tip</div>'+
                                '$meituanFlag'+
                            '</div>'+
                            '<div class="item-others">'+
                                '$others'+
                            '</div>'+
                        '</div>'+
                    '</div>';

    /**
     * 请求数据
     * @param 
     */
    function getList(){
        $.get('../json/homelist.json', function(data){
            console.log(data);
            var list = data.data.poilist || [];
            initContentList(list);
        });
    }


    /**
     * 渲染是否是新到和品牌标签
     * @param {*} data 
     */
    function getBrand(data) {
        if (data.brand_type) {
            return '<div class="brand brand-pin">品牌</div>';
        } else {
            return '<div class="brand brand-xin">新到</div>';
        }
    }

    /**
     *  渲染月售数量
     * @param {*} data 
     */
    function getMonthNum(data) {
        var num = data.month_sale_num;

        // 大于999采用999+
        if (num > 999) {
            return '999+';
        }

        return num;
    }

    /**
     * 是否需要渲染美团专送tag
     * @param {*} data 
     */
    function getMeituanFlag(data) {

        if(data.delivery_type) {
            return '<div class="item-meituan-flag">美团专送</div>';
        }

        return '';
    }

    /**
     * 渲染商家活动
     * @param {*} data 
     */
    function getOthers(data) {
        var array = data.discounts2;
        var str = '';
        array.forEach((item, index)=>{
            var _str = '<div class="other-info">'+
                            '<img src=$icon_url class="other-tag"/>'+
                            '<div class="other-content">$info</div>'+
                        '</div>';
            _str = _str.replace('$icon_url',item.icon_url)
                   .replace('$info',item.info);


            str = str + _str;
        });

        return str;
    }
    /**
     * 渲染列表
     * @param [*] array 
     */
    function initContentList(list) {


        list.forEach(function(item, index){


            var str = itemTmpl.replace('$pic_url',item.pic_url)
            .replace('$name',item.name)
            .replace('$distance',item.distance)
            .replace('$mt_delivery_time',item.mt_delivery_time)
            .replace('$min_price_tip',item.min_price_tip)


            .replace('$brand',getBrand(item))

            .replace('$monthNum',getMonthNum(item))

            .replace('$meituanFlag',getMeituanFlag(item))
            
            .replace('$others', getOthers(item))

            .replace('$wm_poi_score',new StarScore(item.wm_poi_score).getStars());


            $('.list-wrap').append(str);

        });
    }


    function addClick(){
        $('.category-content').on('click','.category-item', function(){
            alert(1);
        });
    }

    /**
     * @constructor init
     * @description 列表单个组件
     */
    function init(argument) {
        getList();
    }


    init();
})();

样式

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed, 
figure, figcaption, footer, header, hgroup, 
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
    margin: 0;
    padding: 0;
    border: 0;
    font-size: 100%;
    font: inherit;
    vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, 
footer, header, hgroup, menu, nav, section {
    display: block;
}
body {
    line-height: 1;
}
ol, ul {
    list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
    content: '';
    content: none;
}
table {
    border-collapse: collapse;
    border-spacing: 0;
}

.clearfix:after {
    content: " ";
    visibility: hidden;
    display: block;
    height: 0;
    clear: both;
}

.scale-1px {
    position: relative;
    border: none;
}

.scale-1px:after {
    content: '';
    position: absolute;
    height: 1px;
    width: 100%;
    bottom: 0;
    left: 0;
    -webkit-transform: scaleY(0.5);
    transform: scaleY(0.5);
    -webkit-transform-origin: 0 0;
    transform-origin: 0 0;
}

.one-line {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
}
.two-line {
    display: -webkit-box;
    -webkit-line-clamp: 2;
    overflow: hidden;
    text-overflow: ellipsis;
    -webkit-box-orient: vertical;
}
.hide {
    display: none;
}
* {
    -webkit-tap-highlight-color:transparent;
}

.header {
    position: relative;
}
.banner-img {
    width: 100%;
    height: 4.746667rem;
}
.search-bar {
  width: 100%;
  height: 1.0666666667rem;
  position: absolute;
  display: flex;
  align-items: center;
  justify-content: center;
  padding-top: 0.3733333333rem;
}
.search-bar .bar-location {
  margin-right: 0.5333333333rem;
  border-radius: 0.3466666667rem;
  background-color: rgba(0, 0, 0, 0.33);
  height: 0.7466666667rem;
  width: 2.4533333333rem;
}
.search-bar .location-icon {
  display: inline-block;
  width: 0.4rem;
  height: 0.5333333333rem;
  vertical-align: 0.2133333333rem;
  margin-left: 0.16rem;
  background-image: url("../img/locationIcon.png");
  background-size: cover;
}
.search-bar .location-text {
  position: relative;
  display: inline-block;
  font-size: 0.3733333333rem;
  color: #fff;
  vertical-align: 0.32rem;
}
.search-bar .location-text:after {
  content: '';
  display: block;
  position: absolute;
  width: 0.3733333333rem;
  height: 0.3733333333rem;
  background-image: url("../img/arrowIcon.png");
  background-size: cover;
  right: -0.4rem;
  top: -0.0266666667rem;
}
.search-bar .search-btn {
  position: relative;
  width: 4.5333333333rem;
  height: 0.8rem;
  background-color: #fff;
  border-radius: 0.5333333333rem;
}
.search-bar .search-btn:before {
  content: '';
  display: block;
  position: absolute;
  width: 0.3733333333rem;
  height: 0.3733333333rem;
  background-image: url("../img/searchIcon.png");
  background-size: cover;
  top: 0.1866666667rem;
  left: 0.2666666667rem;
}
.search-bar .place-holder {
  color: #a9a9a9;
  font-size: 0.3733333333rem;
  height: 100%;
  line-height: 0.8rem;
  margin-left: 0.7466666667rem;
}
.category-content {
  padding-bottom: 0.2666666667rem;
}
.category-content .category-item {
  float: left;
  width: 25%;
  padding-top: 0.3733333333rem;
  font-size: 0.3466666667rem;
  display: flex;
  flex-direction: column;
  align-items: center;
}
.category-content .item-icon {
  width: 1.2533333333rem;
}
.category-content .item-name {
  margin-top: 0.3733333333rem;
}
.star-score .star {
  width: 0.2666666667rem;
  height: 0.2666666667rem;
  float: left;
  background-size: cover;
}
.star-score .fullstar {
  background-image: url("./img/fullstar.png");
}
.star-score .halfstar {
  background-image: url("./img/halfstar.png");
}
.star-score .nullstar {
  background-image: url("./img/gray-star.png");
}
.list-content {
  overflow: hidden;
  padding-bottom: 1.3333333333rem;
}
.list-content .list-title {
  text-align: center;
  font-size: 0.4266666667rem;
  margin-top: 0.3733333333rem;
  margin-bottom: 0.1333333333rem;
}
.list-content .title-line {
  display: inline-block;
  border-bottom: 1px solid #949494;
  height: 0.0266666667rem;
  width: 0.8rem;
  margin-left: 0.1066666667rem;
  margin-right: 0.1066666667rem;
  margin-bottom: 0.1066666667rem;
}

.r-item-content {
  display: flex;
  padding-top: 0.4rem;
  padding-bottom: 0.4rem;
  margin-left: 0.2666666667rem;
  margin-right: 0.2666666667rem;
  color: #656565;
}
.r-item-content:after {
  background-color: #e4e4e4;
}
.r-item-content .item-img {
  width: 2.2933333333rem;
  height: 1.7333333333rem;
  border: 1px solid #e4e4e4;
}
.r-item-content .item-info-content {
  flex: 1;
  margin-left: 0.1866666667rem;
  overflow: hidden;
}
.r-item-content .brand {
  position: absolute;
  left: 0.0266666667rem;
  top: 0.4266666667rem;
  font-size: 0.32rem;
  padding: 0.0533333333rem;
  color: #fff;
}
.r-item-content .brand-pin {
  background-color: #ffa627;
}
.r-item-content .brand-xin {
  background-color: #21c56c;
}
.r-item-content .item-title {
  margin-top: 0.08rem;
  font-size: 0.4266666667rem;
  font-weight: 500;
  color: #333;
}
.r-item-content .item-desc {
  margin-top: 0.3466666667rem;
  font-size: 0.32rem;
}
.r-item-content .item-score {
  float: left;
}
.r-item-content .item-count {
  float: left;
  margin-left: 0.1333333333rem;
}
.r-item-content .item-time {
  float: right;
}
.r-item-content .item-distance {
  float: right;
}
.r-item-content .item-price {
  margin-top: 0.2666666667rem;
  font-size: 0.32rem;
  height: 0.64rem;
}
.r-item-content .item-meituan-flag {
  float: right;
  background-color: #ffd161;
  color: #000;
  padding: 0.08rem;
  border-radius: 0.08rem;
}
.r-item-content .other-info {
  color: #898989;
  margin-top: 0.1866666667rem;
  font-size: 0.32rem;
  display: flex;
}
.r-item-content .other-tag {
  width: 0.3733333333rem;
  height: 0.3733333333rem;
}
.r-item-content .other-content {
  vertical-align: 0.08rem;
  margin-left: 0.08rem;
  height: 0.3733333333rem;
  width: 6.1333333333rem;
}
.r-item-content .item-pre-price {
  float: left;
}
.bottom-bar {
  position: fixed;
  bottom: 0;
  width: 100%;
  height: 1.3333333333rem;
  display: flex;
  border-top: 1px solid #b6b6b6;
  background-color: rgba(246, 246, 246, 0.95);
}
.bottom-bar .btn-item {
  text-decoration: none;
  flex: 1;
  font-size: 0.2933333333rem;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  color: #999;
}
.bottom-bar .btn-item .tab-icon {
  margin-bottom: 0.1066666667rem;
  width: 0.6666666667rem;
  height: 0.6666666667rem;
  background-size: cover;
}
.bottom-bar .btn-item.active {
  color: #000;
}
.bottom-bar .btn-item.my.active .tab-icon {
  background-image: url("./img/myIconActive.png");
}
.bottom-bar .btn-item.my .tab-icon {
  background-image: url("./img/myIcon.png");
}
.bottom-bar .btn-item.order .tab-icon {
  background-image: url("./img/orderIcon.png");
}
.bottom-bar .btn-item.order.active .tab-icon {
  background-image: url("./img/orderIconActive.png");
}
.bottom-bar .btn-item.index .tab-icon {
  background-image: url("./img/homeIcon.png");
}
.bottom-bar .btn-item.index.active .tab-icon {
  background-image: url("./img/homeIconActive.png");
}

源码

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

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

相关文章

【01初识】-初识 RabbitMQ

目录 学习背景1- 初识 MQ1-1 同步调用什么是同步调用&#xff1f;小结&#xff1a;同步调用优缺点 1-2 异步调用什么是异步调用&#xff1f;小结&#xff1a;异步调用的优缺点&#xff0c;什么时候使用异步调用&#xff1f; 1-3 MQ 技术选型 学习背景 异步通讯的特点&#xff…

centos下面的jdk17的安装配置

文章目录 1.基本指令回顾2.jdk17的安装到这个centos上面2.1首先切换到这个root下面去2.2查看系统jdk版本2.3首先到官网找到进行下载2.4安装包的上传2.5jdk17的安装包的解压过程2.6配置环境变量2.7是否设置成功&#xff0c;查看版本 1.基本指令回顾 ls:list也就是列出来这个目录…

基于【图像识别】基于模板匹配实现蓝色、绿色、黄色车牌识别附matlab代码

车牌识别是智能交通系统的重要部分&#xff0c;主要涉及模式识别、数字图像处理、计算机应用和人工智能等学科。车牌识别过程主要由车牌定位、车牌字符分割和车牌字符识别组成。文中主要对车牌字符识别进行了研究&#xff0c;并在MATLAB环境下进行了相应的实验。文中在车牌字符…

SpringAOP:对于同一个切入点,不同切面不同通知的执行顺序

目录 1. 问题描述2. 结论结论1&#xff1a;"对于同一个切入点&#xff0c;同一个切面不同类型的通知的执行顺序"结论2&#xff1a;"对于同一个切入点&#xff0c;不同切面不同类型通知的执行顺序" 3. 测试环境&#xff1a;SpringBoot 2.3.4.RELEASE测试集合…

jeecgbootvue2菜单路由配置静态文件夹(public)下的html

需求:想要在菜单配置src/assets/iconfont/chart.html显示页面(目的是打包上线以后运维依然可以修改数据) 官网没有相关数据&#xff1a;菜单配置说明 JeecgBoot 开发文档 看云 问题现象: 我把文件放在src/assets/iconfont/chart.html然后在vue中作为 iframe 的 src 属性&am…

CD34:揭开祖细胞的身份之谜

前 言 CD34是广泛存在于各种干细胞或祖细胞表面的糖蛋白&#xff0c;被确定为造血干细胞&#xff08;HSC&#xff09;和造血祖细胞&#xff08;HPC&#xff09;的生物标志物&#xff0c;具有粘附分子的作用。CD34作为多种非造血细胞标志物&#xff0c;同时也在多种癌症干细胞…

#渗透测试#红蓝对抗#Src漏洞挖掘 介绍-Yakit(3)

免责声明 本教程仅为合法的教学目的而准备&#xff0c;严禁用于任何形式的违法犯罪活动及其他商业行为&#xff0c;在使用本教程前&#xff0c;您应确保该行为符合当地的法律法规&#xff0c;继续阅读即表示您需自行承担所有操作的后果&#xff0c;如有异议&#xff0c;请立即停…

ArcGIS必会的选择要素方法(AND、OR、R、IN等)位置选择等

今天来看看ArcGIS中的几个选择的重要使用方法 1、常规选择、 2、模糊查询、 3、组合复合条件查询&#xff08;AND、OR、IN&#xff09;&#xff0c; 4、空值NULL查询 5、位置选择 推荐学习&#xff1a; 以梦为马&#xff0c;超过万名学员学习ArcGIS入门到实战的应用课程…

3211、生成不含相邻零的二进制字符串-cangjie

题目 3211、生成不含相邻零的二进制字符串 思路 dfs 代码 class Solution {let numRune [r0, r1]func dfs(arr: ArrayList<Rune>, ans: ArrayList<String>,n: Int64):Unit{if(arr.size > n){ans.insert(0, String(arr))// println("insert ${String(…

数据结构 ——— 二叉树的概念及结构

目录 二叉树的概念 特殊的二叉树 一、满二叉树 二、完全二叉树 二叉树的概念 二叉树树示意图&#xff1a; 从以上二叉树示意图可以看出&#xff1a; 二叉树每个节点的度不大于 2 &#xff0c;那么整个二叉树的度也不大于 2 &#xff0c;但是也不是每个节点都必须有 2 个…

【vs2022】windows可用的依赖预编译库

ffmpeg 、x264 、x265 等。obs是基于qt6+vs2022+64bit obs的官网传统构建已经不用了obs的s2022构建OBS Deps Build 2024-09-12FFmpeg4.4 库,x64 可用。

TinTin Web3 动态精选:Vitalik 探讨以太坊协议,Solana ETN 开启质押功能

TinTin 快讯由 TinTinLand 开发者技术社区打造&#xff0c;旨在为开发者提供最新的 Web3 新闻、市场时讯和技术更新。TinTin 快讯将以周为单位&#xff0c; 汇集当周内的行业热点并以快讯的形式排列成文。掌握一手的技术资讯和市场动态&#xff0c;将有助于 TinTinLand 社区的开…

Kubernetes:(二)K8Sv1.20二进制部署

文章目录 一、k8s项目架构二、二进制搭建 Kubernetes v1.20 &#xff08;单master节点&#xff09;1.操作系统初始化配置2.部署 docker引擎3. etcd的概念4. 证书认证5. node01 节点操作&#xff08;192.168.44.10&#xff09;6. node02 节点操作&#xff08;192.168.44.40&…

SAP-MM委外订单的退货处理

【案例描述】这是我们公司之前的一个案例&#xff0c;关于供应商托工&#xff08;或称&#xff1a;委外&#xff09;发退料的问题&#xff01;大致的流程如下&#xff1a;由于公司本身的加工能力有限&#xff0c;以及出于成本的考虑&#xff0c;需要将公司的一些原材料由供应商…

八大排序算法——堆排序

目录 前言 一、向上调整算法建堆 二、向下调整算法建堆 三、堆排序 前言 堆排序是基于堆结构的一种排序思想&#xff0c;因此要为一个乱序的数组进行排序的前提是数组必须要是一个堆&#xff0c;所以要先对数组进行建堆操作 一、向上调整算法建堆 时间复杂度&#xff1a;O…

2024年医疗人工智能研究报告-生成式AI爆发,医疗人工智能走到新的十字路口(附下载)

前言 2024的医疗AI&#xff0c;既是坎坷&#xff0c;又是新生。 快速发展的大语言模型&#xff0c;携着生成式AI掠过医疗领域。过往的互联网医疗、医学影像、新药研发……一个一个场景经由新一代AI重塑&#xff0c;焕发出前所未有的价值。 不过&#xff0c;发现价值并不意味着…

微信小程序25__实现卡片变换

先看效果图 实现代码如下&#xff1a; <view class"page" style"filter:hue-rotate({{rotation}}deg)"><view class"prev" catchtap"toPrev">《《《</view><view class"next" catchtap"toNext&q…

115页PPT华为管理变革:制度创新与文化塑造的核心实践

集成供应链&#xff08;ISC&#xff09;体系 集成供应链&#xff08;ISC&#xff09;体系是英文Integrated Supply Chain的缩写&#xff0c;是一种先进的管理思想&#xff0c;它指的是由相互间提供原材料、零部件、产品和服务的供应商、合作商、制造商、分销商、零售商、顾客等…

C++进阶-->多态(Polymorphism)

1. 多态的概念 多态&#xff0c;顾名思义多种形态&#xff1b;多态分为编译时多态&#xff08;静态多态&#xff09;和运行时多态&#xff08;动态多态&#xff09;&#xff0c;静态多态就是就是我们前面讲的函数重载和函数模板&#xff0c;可以通过传不同类型&#xff0c;然后…

stm32教程:keil5安装及stm32f1xx系列芯片包下载

早上好啊&#xff0c;大佬们&#xff0c;咱们这个专栏是来浅学一下stm32的内容&#xff0c;然后本篇是一个导言篇&#xff0c;主要是让大家安装好软件&#xff0c;能够正常的进入stm32的学习。 keil5安装包夸克网盘链接&#xff1a; 链接&#xff1a;https://pan.quark.cn/s/1…