阶段二模块二前端基础作业解题思路

第一题

题目

  • 使用Vue完成简易购物车案例

在这里插入图片描述

思路

1.引入vue.js框架

2.设置一个div块,用来挂载Vue

3.在div块中,用table表格标签做表格,表头写死,表数据使用v-for遍历Vue挂载的数据;价格为浮点数,要采用过滤器的方式解决;表格下再写一个div块来放置总价格,设置其样式左外边距和上外边距

4.初始化Vue框架,挂载div块

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>购物车</title>
    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
</head>
<body>
    <div id="car">
        <table border="1px" width="80%" height="450px" cellspacing="0px" align="center" >
            <!--表头-->
            <tr style='font-size: 28px; font-family: "楷体"; color: lightblue; background-color: dimgray'>
                <th></th>
                <th>书籍名称</th>
                <th>出版日期</th>
                <th>价格</th>
                <th>购买数量</th>
                <th>操作</th>
            </tr>

            <!--遍历books,取得每个book的name等数据-->
            <tr v-for="(book, index) in books" align="center" style="font-weight: bold; font-size: 18px">
                <td>{{index + 1}}</td>
                <td>{{book.name}}</td>
                <td>{{book.date}}</td>
                <td>¥{{book.price | numFilter}}</td>
                <td>
                    <!-- :disabled设置当数量为1时减变灰; @click绑定减数量操作-->
                    <input  type="button" :disabled="book.num === 1" @click="deleteNum(index)" value="-">
                    {{book.num}}
                    <input type="button" @click="addNum(index)"  value="+">
                </td>
                <td>
                    <input type="button" value="移除" @click="deleteItem(index)" style="width: 50%; height: 50%; font-size: 18px">
                </td>
            </tr>
        </table>
        <!--总价格-->
        <div style="margin-left: 10%; margin-top:30px; font-size: 32px; font-weight: bold;">
            总价格:¥{{totalPrice | numFilter}}
        </div>
    </div>

</body>
<script>
    new Vue({
        el:"#car", // 挂载
        data: {  // 数据
            books:[
                {name:"《java编程思想》", date: "2020-9", price: 98.00, num: 1},
                {name:"《数据分析与数据原理》", date: "2019-2", price: 39.00, num: 1},
                {name:"《Hadoop权威指南》", date: "2019-10", price: 59.00, num: 1},
                {name:"《代码大全》", date: "2018-9", price: 128.00, num: 1}
            ],
            totalPrice:0.00
        },
        methods:{
            // 总价格计算
            priceCount:function () {
                this.totalPrice = 0.00;
                for(var book of this.books){
                    this.totalPrice += book.num * book.price
                }
            },
            // 移除书籍
            deleteItem:function (index) {
                this.books.splice(index, 1);
                this.priceCount()
            },
            // 减数量
            deleteNum:function (index) {
                (this.books)[index].num -= 1;
                this.priceCount()
            },
            // 加数量
            addNum:function (index) {
                (this.books)[index].num += 1;
                this.priceCount()
            }

        },
        // 挂载后执行,初始化总价格
        mounted(){
            this.priceCount()
        },
        // 过滤器
        filters:{
            numFilter(value){
                // 截取当前数据到小数点后两位
                let realVal = parseFloat(value).toFixed(2);
                return realVal
            }
        }
    })
</script>
</html>

第二题

题目

  • 签到点亮地图案例

  • 需求: 使用echart 完成 微博点亮中国案例,效果如下图

  • 在这里插入图片描述

分析

1.使用echarts 和 china.js完成地图绘制

2.坐标数据请加载weibo.json 坐标数据

(weibo.json 是第三方提供的坐标信息. 作用是给地图上添加光点. 如上图中的光点是有weibo.json 中的坐标组成的.

weibo.json 中包含 [[json数据,用于展示明暗变化较弱数据],[json数据,用于展示明暗变化稍强数据],[json数据,用于展示较强明暗变化数据]].

使用方式提示:

异步请求加载weibo.json数据,回调函数获取坐标数据 ,Data函数是明暗坐标变化数据, 需要调用3次

Data = function (index) {
                data = weiboData[index];
                var px = data[0] / 1000;
                var py = data[1] / 1000;
                var res = [[px, py]];
    
                for (var i = 2; i < data.length; i += 2) {
                    var dx = data[i] / 1000;
                    var dy = data[i + 1] / 1000;
                    var x = px + dx;
                    var y = py + dy;
                    res.push([x, y, 1]);
                    px = x;
                    py = y;
    
                }
                return res;

在 series: [{ … data: Data(0) , …data: Data(1) , …data(2) }] 调用3次 , 用于一次从暗到明亮展示点亮地图.

3.ajax请求采用jQuery方式异步加载

ajax异步加载的时候使用 live server 运行

代码演示

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>签到点亮地图</title>

    <script src="js/echarts.min.js"></script>
    <script src="js/china.js"></script>
    <script src="js/jquery-3.5.1.js"></script>
</head>
<body>
    <div id="map" style="width:100%; height: 600px; "></div>
    <script>
        $(function () { // 页面加载
            var onChart = null;
            onChart = new echarts.init(document.getElementById("map"));  // 初始化echarts
            load_data(); // 调用方法
            function load_data() {
                onChart.showLoading("loading...");
                $.ajax({ // jQuery的ajax请求
                    url:"data/weibo.json", // 请求地址
                    type:"GET",  // 请求方式
                    dataType:"json",  // 数据类型
                    success:function (weiboData) { // 请求成功后的回调函数
                        onChart.hideLoading("loading...");
                        Data = function (index) { // 计算得出相对应强、中、弱的点的分布
                            data = weiboData[index];
                            var px = data[0] / 1000;
                            var py = data[1] / 1000;
                            var res = [[px, py]];

                            for (var i = 2; i < data.length; i += 2) {
                                var dx = data[i] / 1000;
                                var dy = data[i + 1] / 1000;
                                var x = px + dx;
                                var y = py + dy;
                                res.push([x, y, 1]);
                                px = x;
                                py = y;

                            }
                            return res;
                        };
                        onChart.setOption(option = {
                            backgroundColor: '#404a59',
                            title : { // 标题
                                text: '微博签到数据点亮中国', // 标题名称
                                subtext: 'From ThinkGIS',   // 副标题名称
                                sublink: 'http://www.thinkgis.cn/public/sina', // 副标题链接
                                left: 'center',  // 图例组件离容器左侧的距离,居中
                                top: 'top', // 图例组件离容器左侧的距离,居上
                                textStyle: {  // 文字样式
                                    color: '#fff'
                                }
                            },
                            tooltip: {},
                            legend: { // 图例组件,展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示
                                left: 'left', // 图例组件离容器左侧的距离,居左
                                data: ['强', '中', '弱'],
                                textStyle: {  // 文字样式
                                    color: '#ccc'
                                }
                            },
                            geo: { // 地理坐标系组件,用于地图的绘制,支持在地理坐标系上绘制散点图,线集
                                map: 'china',  // 地图国家
                                roam: true,    // 开启鼠标缩放(scale)和平移漫游(move), true表示两者都开
                                emphasis: {  // 高亮状态下的多边形和标签样式
                                    label: {
                                        show: false  // 是否显示标签
                                    },
                                    itemStyle: {
                                        areaColor: '#2a333d' // 地图区域的颜色
                                    }
                                },
                                itemStyle: {
                                    areaColor: '#323c48', // 地图区域背景色
                                    borderColor: '#111'   // 区域分界线颜色
                                }
                            },
                            series: [{
                                name: '弱', // 系列名称,用于tooltip的显示,legend 的图例筛选
                                type: 'scatter',  // 散点(气泡)图
                                coordinateSystem: 'geo', // 使用地理坐标系,通过 geoIndex 指定相应的地理坐标系组件
                                symbolSize: 1, // 标记的大小, 标记symbol默认为circle
                                large: true,  // 是否开启大数据量优化,在数据图形特别多而出现卡顿时候可以开启
                                itemStyle: {  // 图形样式,即circle的样式设置
                                    shadowBlur: 2,  // 图形阴影的模糊大小。该属性配合 shadowColor,shadowOffsetX, shadowOffsetY 一起设置图形的阴影效果
                                    shadowColor: 'rgba(37, 140, 249, 0.8)', // 阴影颜色
                                    color: 'rgba(37, 140, 249, 0.8)'  // 图形的颜色
                                },
                                data: Data(0) // 数据
                            }, {
                                name: '中',
                                type: 'scatter',
                                coordinateSystem: 'geo',
                                symbolSize: 1,
                                large: true,
                                itemStyle: {
                                    shadowBlur: 2,
                                    shadowColor: 'rgba(14, 241, 242, 0.8)',
                                    color: 'rgba(14, 241, 242, 0.8)'
                                },
                                data: Data(1)
                            }, {
                                name: '强',
                                type: 'scatter',
                                coordinateSystem: 'geo',
                                symbolSize: 1,
                                large: true,
                                itemStyle: {
                                    shadowBlur: 2,
                                    shadowColor: 'rgba(255, 255, 255, 0.8)',
                                    color: 'rgba(255, 255, 255, 0.8)'
                                },
                                data: Data(2)
                            }]
                        });
                    }
                });
            }
        })
    </script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值