最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3實(shí)現(xiàn)高德地圖天氣小組件

 更新時(shí)間:2024年10月23日 10:17:07   作者:shix .  
這篇文章主要為大家詳細(xì)介紹了如何使用vue3實(shí)現(xiàn)一個(gè)高德地圖天氣小組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

效果圖

使用方法

<weather-view type="rect-solid" :borderColor="['#7ACAEC', '#068BBD']"></weather-view>

天氣圖標(biāo)文件夾 本來想全弄成svg動(dòng)態(tài)圖片的,但找了很久都沒找到對(duì)應(yīng)的圖(只找到了幾個(gè)),于是就暫時(shí)擱置了

組件全代碼如下 注意getWeather方法中的高德天氣key需要改成自己的

<template>
    <div class="dv-component-weather" :style="{ width: width, height: height }">
        <div class="dv-time">
            <span v-text="time"></span>
            <span v-text="date"></span>
        </div>
        <div class="dv-weather">
            <img :src="icon" />
            <div>
                <span v-text="weather"></span>
                <span v-text="temperature" class="temperature"></span>
                <span v-text="city"></span>
            </div>
        </div>
        <div class="dv-box-border">
            <dv-border-box-13 v-if="type == 'normal'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-13>
            <dv-border-box-12 v-if="type == 'rect-horn'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-12>
            <dv-border-box-10 v-if="type == 'rect-horn-big'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-10>
            <dv-border-box-8 v-if="type == 'rotate'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-8>
            <dv-border-box-9 v-if="type == 'rect'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-9>
            <dv-border-box-7 v-if="type == 'shadow'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-7>
            <dv-border-box-2 v-if="type == 'rect-solid'" :color="borderColor" :backgroundColor="backColor"></dv-border-box-2>
        </div>
    </div>
</template>
<script>
import { ref, onMounted } from "vue";
/**
 * 獲取指定的cookie值
 * @param {string} name 要查詢的Cookie字段名
 */
function getCookie(name) {
    var arr,
        reg = new RegExp("(^| )" + name + "=([^;]*)(;|$)");
    if ((arr = document.cookie.match(reg))) return decodeURIComponent(arr[2]);
    else return "";
}
/**
 * 刪除指定的cookie值
 * @param {string} name 要?jiǎng)h除的Cookie字段名
 */
function removeCookie(name) {
    let date = new Date();
    date.setTime(date.getTime() - 1);
    document.cookie = name + "=''" + "; expires=" + date.toUTCString();
}
/**
 * 格式化日期字符串
 * @param {string} 日期字符串 2021-04-10或可以轉(zhuǎn)換為日期的其他格式
 * @param {object} 配置項(xiàng):hasTime-是否帶有時(shí)間 datelabel-日期分隔符 timelabel-時(shí)間分隔符 separator-日期與時(shí)間的分隔符
 */
function dateFormatter(date, options) {
    options = options ? options : {};
    options.datelabel = options.datelabel ? options.datelabel : "-"; //日期分隔符
    options.timelabel = options.timelabel ? options.timelabel : ":"; //時(shí)間分隔符
    options.separator = options.separator ? options.separator : " "; //日期時(shí)間分隔符
    options.hasTime = options.hasTime ? options.hasTime : false; //返回值是否帶時(shí)間
    options.hasWeek = options.hasWeek ? options.hasWeek : false; //返回值是否帶星期
    options.hasTimeUnit = options.hasTimeUnit ? options.hasTimeUnit : false; //是否使用時(shí)間單位
    options.hasDateUnit = options.hasDateUnit ? options.hasDateUnit : false; //是否使用日期單位
    //是否返回格式化后的數(shù)組 若為true,則返回值為一個(gè)對(duì)象,formatter為自定義格式,array為格式化后的字符串信息
    options.hasArray = options.hasArray ? options.hasArray : false;
    let d = new Date(date);
    let year = d.getFullYear();
    let month = d.getMonth() + 1 < 10 ? "0" + (d.getMonth() + 1) : d.getMonth() + 1;
    let day = d.getDate() < 10 ? "0" + d.getDate() : d.getDate();
    let hours = d.getHours() < 10 ? "0" + d.getHours() : d.getHours();
    let minute = d.getMinutes() < 10 ? "0" + d.getMinutes() : d.getMinutes();
    let second = d.getSeconds() < 10 ? "0" + d.getSeconds() : d.getSeconds();
    let formatterArray = [];
    let formatter = "";
    if (options.hasDateUnit == true) {
        formatter = year + "年" + month + "月" + day + "日";
    } else {
        formatter = year + options.datelabel + month + options.datelabel + day;
    }
    formatterArray.push(formatter);
    if (options.hasTime == true && options.hasTimeUnit == false) {
        formatter += options.separator + hours + options.timelabel + minute + options.timelabel + second;
        formatterArray.push(hours + options.timelabel + minute + options.timelabel + second);
    } else if (options.hasTime == true && options.hasTimeUnit == true) {
        formatter += options.separator + hours + "時(shí)" + minute + "分" + second + "秒";
        formatterArray.push(hours + "時(shí)" + minute + "分" + second + "秒");
    } else if (options.hasTime == false && options.hasTimeUnit == false) {
        formatterArray.push(hours + options.timelabel + minute + options.timelabel + second);
    } else if (options.hasTime == false && options.hasTimeUnit == true) {
        formatterArray.push(hours + "時(shí)" + minute + "分" + second + "秒");
    }
    let weekList = ["星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
    if (options.hasWeek == true) {
        formatter += " " + weekList[d.getDay()];
        formatterArray.push(weekList[d.getDay()]);
    } else {
        formatterArray.push(weekList[d.getDay()]);
    }
    if (options.hasArray == true) {
        return {
            formatter: formatter,
            array: formatterArray,
        };
    }
    return formatter;
}
export default {
    name: "weatherView",
    setup(prop, ctx) {
        let time = ref("");
        let date = ref("");
        let weather = ref("");
        let temperature = ref("");
        let city = ref("");
        let icon = ref("");
        let getDateTime = () => {
            let d = dateFormatter(new Date(), { hasArray: true });
            time.value = d.array[1];
            date.value = d.array[0] + " " + d.array[2];
        };
        let setWeather = (data) => {
            city.value = data.city;
            weather.value = data.weather;
            temperature.value = data.temperature + "℃";
            icon.value = "./images/weather/" + data.weather + ".svg";
        };
        let getWeather = () => {
            let xhr = new XMLHttpRequest();
            // 個(gè)人key(每天30W次,每秒200并發(fā)): 8bed5b0020bc38b52cfa6166a7babffe
            xhr.open("get", "http://restapi.amap.com/v3/weather/weatherInfo?city=230100&key=此處填寫自己的高德天氣接口的key值");
            xhr.onload = (e) => {
                if (e.target.readyState == 4) {
                    let res = JSON.parse(e.target.responseText);
                    if (res.infocode === "10000") {
                        res = res.lives[0];
                        setWeather(res);
                        let info = {
                            city: res.city,
                            weather: res.weather,
                            temperature: res.temperature,
                        };
                        let delay = new Date();
                        delay.setHours(delay.getHours() + 1);
                        document.cookie = "_dv_gdweather=" + JSON.stringify(info) + "; expires=" + delay.toUTCString();
                    } else {
                        console.log("weather_error:", "infocode is " + res.infocode + "!");
                    }
                }
            };
            xhr.send();
        };
        onMounted(() => {
            getDateTime();
            let _dv_gdweather = getCookie("_dv_gdweather");
            if (!_dv_gdweather) {
                getWeather();
            } else {
                setWeather(JSON.parse(_dv_gdweather));
            }
            // 動(dòng)態(tài)設(shè)置時(shí)間-每秒變化
            setInterval(() => {
                getDateTime();
            }, 1000);
            // 動(dòng)態(tài)設(shè)置天氣-每小時(shí)
            setInterval(() => {
                getWeather();
            }, 1000 * 60 * 60 + 1);
        });
        return {
            icon,
            time,
            date,
            weather,
            city,
            temperature,
        };
    },
    props: {
        type: {
            type: String,
            default: "normal",
        },
        width: {
            type: String,
            default: "100%",
        },
        height: {
            type: String,
            default: "100%",
        },
        borderColor: {
            type: Array,
            default: () => {
                // return ["#295B6B", "#3C538F"];
                return ["#295B6B"];
            },
        },
        backColor: {
            type: String,
            default: "transparent",
        },
    },
};
</script>
<style lang="scss" scoped>
$font: 0.18rem;
.dv-component-weather {
    font-size: $font;
    // color: #fff;
    color: rgb(188, 239, 243);
    position: relative;
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: 0.15rem;
    box-sizing: border-box;
    .dv-box-border {
        position: absolute;
        width: 100%;
        height: 100%;
        top: 0;
        left: 0;
        z-index: 1;
    }
    .dv-time {
        // font-size: #{$font * 1.2};
        display: flex;
        flex-direction: column;
        align-items: center;
        justify-content: center;
        height: 100%;
        width: 53%;
        white-space: nowrap;
        position: relative;
        z-index: 2;
        span {
            &:first-child {
                font-size: #{$font * 1.8};
            }
            &:last-child {
                font-size: #{$font * 1};
            }
        }
    }
    .dv-weather {
        height: 100%;
        width: 47%;
        display: flex;
        align-items: center;
        justify-content: space-between;
        font-size: #{$font * 0.8};
        position: relative;
        z-index: 2;
        img {
            width: 0.7rem;
            height: 0.7rem;
        }
        div {
            flex: 1;
            display: flex;
            flex-direction: column;
            justify-content: flex-start;
            align-items: flex-start;
            span {
                margin-bottom: 0.05rem;
                &:first-child {
                    font-size: #{$font * 0.7};
                }
                &:last-child {
                    font-size: #{$font * 0.7};
                    margin: 0;
                }
            }
        }
    }
}
</style>

到此這篇關(guān)于vue3實(shí)現(xiàn)高德地圖天氣小組件的文章就介紹到這了,更多相關(guān)vue3天氣組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 移動(dòng)端Vue2.x Picker的全局調(diào)用實(shí)現(xiàn)

    移動(dòng)端Vue2.x Picker的全局調(diào)用實(shí)現(xiàn)

    這篇文章主要介紹了移動(dòng)端Vue2.x Picker的全局調(diào)用實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • vue中的proxyTable反向代理(親測有用)

    vue中的proxyTable反向代理(親測有用)

    這篇文章主要介紹了vue中的proxyTable反向代理(親測有用),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • Vue3全局組件通信之provide?/?inject詳解

    Vue3全局組件通信之provide?/?inject詳解

    這篇文章主要介紹了Vue3全局組件通信之provide?/?inject,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-03-03
  • spring-cloud-stream的手動(dòng)消息確認(rèn)問題

    spring-cloud-stream的手動(dòng)消息確認(rèn)問題

    這篇文章主要介紹了spring-cloud-stream的手動(dòng)消息確認(rèn)問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • vue的v-if里實(shí)現(xiàn)調(diào)用函數(shù)

    vue的v-if里實(shí)現(xiàn)調(diào)用函數(shù)

    這篇文章主要介紹了vue的v-if里實(shí)現(xiàn)調(diào)用函數(shù)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • vue如何將對(duì)象中所有的key賦為空值

    vue如何將對(duì)象中所有的key賦為空值

    這篇文章主要介紹了vue如何將對(duì)象中所有的key賦為空值,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-04-04
  • antd Form組件方法getFieldsValue獲取自定義組件的值操作

    antd Form組件方法getFieldsValue獲取自定義組件的值操作

    這篇文章主要介紹了antd Form組件方法getFieldsValue獲取自定義組件的值操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-10-10
  • Vue 組件修改根實(shí)例的數(shù)據(jù)的方法

    Vue 組件修改根實(shí)例的數(shù)據(jù)的方法

    這篇文章主要介紹了Vue 組件修改根實(shí)例的數(shù)據(jù)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • vue-cli4.0如何配置CDN加速

    vue-cli4.0如何配置CDN加速

    這篇文章主要介紹了vue-cli4.0如何配置CDN加速問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • vue服務(wù)端渲染頁面緩存和組件緩存的實(shí)例詳解

    vue服務(wù)端渲染頁面緩存和組件緩存的實(shí)例詳解

    本篇文章給大家?guī)淼膬?nèi)容是關(guān)于vue服務(wù)端渲染頁面緩存和組件緩存的介紹(代碼),有一定的參考價(jià)值,有需要的朋友可以參考一下
    2018-09-09

最新評(píng)論

涿鹿县| 开平市| 峡江县| 武乡县| 河源市| 石首市| 太仆寺旗| 四子王旗| 棋牌| 巨鹿县| 安康市| 定南县| 钟山县| 连江县| 将乐县| 师宗县| 兴宁市| 通渭县| 哈巴河县| 正蓝旗| 连城县| 哈密市| 罗江县| 微山县| 沾化县| 奉新县| 满城县| 安阳市| 浠水县| 云和县| 常山县| 曲松县| 泰顺县| 岚皋县| 正蓝旗| 无棣县| 柞水县| 承德市| 锡林浩特市| 定州市| 浦江县|