国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造

這篇具有很好參考價(jià)值的文章主要介紹了vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造

NutUI 有日期時(shí)間選擇器,但是滑動(dòng)效果太差,卡頓明顯。換成 原生小程序 很順暢

vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造,微信公眾號(hào)小程序,小程序,taro,javascript

上代碼:

<template>
  <view>
    <picker
      mode="multiSelector"
      @change="confirmPicker"
      @columnChange="scrollColumnChange"
      :value="columnVal"
      :range="multiArray"
    >
      <nut-cell
        title="選擇時(shí)間"
        :desc="showVal"
        @click="copyColumnVal = columnVal"
      ></nut-cell>
      <!-- <view @click="copyColumnVal = columnVal">
        當(dāng)前選擇:{{ showVal }}
      </view> -->
    </picker>
  </view>
</template>

<script setup>
import { ref, onMounted, watch } from "vue";
const multiArray = ref(undefined); // 列可選列表
const columnVal = ref(undefined); // 列當(dāng)前選中值
const copyColumnVal = ref(undefined); // 記錄滾動(dòng)中數(shù)據(jù)
const showVal = ref(undefined); // 顯示:后年月日時(shí)分

// 個(gè)位數(shù)時(shí) 補(bǔ)0
const add0 = (num) => String(num > 9 ? num : "0" + num);

// 判斷平年閏年
const resYearType = (year) =>
  (year % 4 == 0) & (year % 100 != 0) || year % 400 == 0;

// 獲取當(dāng)前時(shí)間
const getNowT = (timeInfo) => {
  // timeInfo 為 年月日字符串 或者 時(shí)間戳
  var nowT = new Date(timeInfo);
  return {
    year: nowT.getFullYear(),
    month: nowT.getMonth() + 1,
    day: nowT.getDate(),
    hour: nowT.getHours(),
    minute: nowT.getMinutes(),
    second: nowT.getSeconds(),
  };
};

// 設(shè)置當(dāng)前時(shí)間 - columnVal:每列索引數(shù)組集合
function setNowTime(timeStr) {
  const timeObj = getNowT(timeStr); // timeObj 為: { year, month, day... }
  const { year, month, day, hour, minute } = timeObj;
  // 獲取滾動(dòng)列表數(shù)據(jù)
  const [
    years,
    months,
    days,
    hours,
    minutes,
  ] = multiArray.value;
  const yearsIdx = years.findIndex((item) => item == year);
  const monthsIdx = months.findIndex((item) => item == month);
  const daysIdx = days.findIndex((item) => item == day);
  const hoursIdx = hours.findIndex((item) => item == hour);
  const minutesIdx = minutes.findIndex((item) => item == minute);
  columnVal.value = [yearsIdx, monthsIdx, daysIdx, hoursIdx, minutesIdx];
  showVal.value = `${year}/${add0(month)}/${add0(day)} ${add0(hour)}:${add0(
    minute
  )}`;

  // 根據(jù)當(dāng)前時(shí)間,初始化可選擇日期時(shí)間
  setDaysList(columnVal.value)
}

// 初始化時(shí)間
function initColumn(daysNum = 31) {
  // 年
  const yearStart = 2000; // 年 - 開始時(shí)間
  const yearLength = 100; // 年 - 列表長度
  const years = Array.from({ length: yearLength }).map((i, idx) =>
    add0((idx += yearStart))
  );

  // 月
  const months = Array.from({ length: 12 }).map((i, idx) => add0((idx += 1)));

  // 日
  const days = Array.from({ length: daysNum }).map((i, idx) =>
    add0((idx += 1))
  );

  // 時(shí)
  const hours = Array.from({ length: 24 }).map((i, idx) => add0((idx += 0)));

  // 分
  const minutes = Array.from({ length: 60 }).map((i, idx) => add0((idx += 0)));

  multiArray.value = [
    years,
    months,
    days,
    hours,
    minutes,
  ];
}

// 滾動(dòng)設(shè)置可選天數(shù) 28 - 29 - 30 - 31
function setDays(daysNum = 31) {
  multiArray.value[2] = Array.from({ length: daysNum }).map((i, idx) =>
    add0((idx += 1))
  );

  // 深拷貝下,否則不動(dòng)態(tài)修改列
  multiArray.value = JSON.parse(JSON.stringify(multiArray.value));
}

// 修改每月的天數(shù)
function setDaysList(columnArr) {
  const [yearsIdx, monthsIdx] = columnArr;
  const [years] = multiArray.value;
  // 當(dāng)選擇2月
  if (monthsIdx == 1) {
    // 如果閏年
    if (resYearType(years[yearsIdx])) {
      setDays(29);
    } else {
      setDays(28);
    }
  } else if ([1, 3, 5, 7, 8, 10, 12].includes(monthsIdx + 1)) {
    // 當(dāng)選擇1, 3, 5, 7, 8, 10, 12月
    setDays(31);
  } else {
    setDays(30);
  }
}

// 確認(rèn)選中結(jié)果
function confirmPicker(e) {
  columnVal.value = e.detail.value;
  const [yearsIdx, monthsIdx, daysIdx, hoursIdx, minutesIdx] = e.detail.value;
  const [years, months, days, hours, minutes] = multiArray.value;
  showVal.value = `${years[yearsIdx]}/${months[monthsIdx]}/${days[daysIdx]} ${hours[hoursIdx]}:${minutes[minutesIdx]}`;
}

// 滾動(dòng)事件(未點(diǎn)擊確定)
function scrollColumnChange(e) {
  const { column, value } = e.detail;
  copyColumnVal.value[column] = value;
  setDaysList(copyColumnVal.value);

  console.log("修改的列為", column, ",值為", value);
}

// 初始化
onMounted(() => {
  initColumn();

  // 回顯時(shí)間
  setNowTime(new Date().getTime());
});


// 監(jiān)聽傳遞日期
const props = defineProps({
  propsTime: {
    type: String,
    default: ''
  }
})
watch(props.propsTime, (newValue, oldValue) => {
  console.log('值發(fā)生了變更', newValue, oldValue);
  // 回顯時(shí)間
  setNowTime(newValue);
});

</script>

若需要自定義年開始時(shí)間,見 initColumn 方法

vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造,微信公眾號(hào)小程序,小程序,taro,javascript

如作為組件,通過父級(jí)傳遞,可使用:

vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造,微信公眾號(hào)小程序,小程序,taro,javascript文章來源地址http://www.zghlxwxcb.cn/news/detail-641760.html

到了這里,關(guān)于vue3 setup+Taro3 調(diào)用原生小程序自定義年月日時(shí)分多列選擇器,NutUI改造的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Taro3的編譯配置

    taro的編譯配置存放在項(xiàng)目根目錄下的 config 文件中,有三個(gè)文件 index.js 是通用配置 dev.js 是項(xiàng)目開發(fā)時(shí)的配置 prod.js 是項(xiàng)目打包時(shí)的配置 1. 默認(rèn)配置 2. 配置詳情 sourceRoot 源代碼存在的目錄 類型: string 默認(rèn): src outputRoot 打包后的代碼存在目錄 類型: string 默認(rèn): dist design

    2024年02月13日
    瀏覽(18)
  • vue3的setup函數(shù)中定義data數(shù)據(jù),使用data數(shù)據(jù)

    vue3保留了vue2的語法,但是不能混著用,setup中定義原有vue2中data數(shù)據(jù)的方法有所改變 直接上代碼 對(duì)比原有vue2代碼 data() { ? ? ? ? ? ? return { ? ? ? ? ? ? ? ? name: \\\"張三\\\", ? ? ? ? ? ? ? ? age:18 ? ? ? ? ? ? } ? ? } 在setup函數(shù)中使用數(shù)據(jù)也無需 this.xxx, 而是用你定義的名字

    2024年02月12日
    瀏覽(30)
  • vue3自定義dialog createApp setup語法組件使用element

    vue3自定義dialog createApp setup語法組件使用element

    目錄 ?index.vue mapDialog.js

    2024年02月14日
    瀏覽(21)
  • 在uniapp vue3 setup語法糖中調(diào)用onLoad、onShow等生命周期

    在uniapp vue3 setup語法糖中調(diào)用onLoad、onShow等生命周期

    從 @dcloudio/uni-app 導(dǎo)出 可導(dǎo)出項(xiàng):

    2024年02月16日
    瀏覽(30)
  • vue3+taro+Nutui 開發(fā)小程序(二)

    vue3+taro+Nutui 開發(fā)小程序(二)

    上一篇我們初始化了小程序項(xiàng)目,這一篇我們來整理一下框架 首先可以看到我的項(xiàng)目整理框架是這樣的: ?components:這里存放封裝的組件 custom-tab-bar:這里存放自己封裝的自定義tabbar interface:這里放置了Ts的一些基本泛型,不用Ts的可以忽略 pages:這里放置了小程序的所有頁面

    2024年02月16日
    瀏覽(27)
  • vue3+taro+Nutui 開發(fā)小程序(一)

    vue3+taro+Nutui 開發(fā)小程序(一)

    前言:最近在調(diào)研開發(fā)小程序,發(fā)現(xiàn)現(xiàn)在taro框架逐漸成熟,能完美地使用vue3來進(jìn)行開發(fā),調(diào)研中發(fā)現(xiàn)京東的Nutui也不錯(cuò)所以準(zhǔn)備寫一個(gè)由0到1的vue3+taro+Nutui的小程序。 這篇我們首先搭建一個(gè)框架: vscode插件準(zhǔn)備環(huán)節(jié): 目前我用到的插件如下: Eslint? ?用來vue格式化代碼的

    2024年02月08日
    瀏覽(22)
  • Taro+Vue3 小程序引入echarts表

    Taro+Vue3 小程序引入echarts表

    背景:根據(jù)需求在一個(gè)報(bào)告界面需要展示不同的echarts表來使數(shù)據(jù)更友好的顯示。 效果如下: 一.taro支持echarts 官方說明:Taro 文檔支持引用小程序端第三方組件庫 物料文檔:Taro 物料市場 | 讓每一個(gè)輪子產(chǎn)生價(jià)值 二.引入echarts-for-weixin插件 github地址: https://github.com/ecomfe/echar

    2024年02月13日
    瀏覽(22)
  • Taro + vue3 + js + nutUI 框架中自定義tabbar的組件封裝以及頁面跳轉(zhuǎn)的邏輯

    1.需求: ? 在H5 中需要封裝一個(gè)自定義的tabbar 菜單跳轉(zhuǎn) 通過nut-ui 進(jìn)行二次封裝 2. 注意點(diǎn) ? H5 中原生的tabbar 在ios 中會(huì)出現(xiàn)問題 所以進(jìn)行 封裝tabbar 3. 代碼操作 首先全部的代碼? 4.解析 tabList: 菜單的內(nèi)容數(shù)組? 根據(jù)自己菜單的數(shù)量 來決定 const tabList = reactivemenu[]([ ? ? { ? ?

    2024年04月17日
    瀏覽(96)
  • Taro+Vue3開發(fā)微信小程序的分享好友功能

    Taro+Vue3開發(fā)微信小程序的分享好友功能

    1、背景:使用taro框架和vue3框架開發(fā)小程序,實(shí)現(xiàn)一個(gè)把pdf文件直接分享給微信好友。 一開始看taro文檔理解有偏差,導(dǎo)致分享出去的文件是個(gè)app的小程序連接。如下圖 ?實(shí)現(xiàn)代碼如下: 后續(xù)仔細(xì)查看taro文檔, Taro 文檔,發(fā)現(xiàn)這種寫法是個(gè)頁面組件,轉(zhuǎn)發(fā)出去的是個(gè)小程序,

    2024年02月12日
    瀏覽(26)
  • taro+vue3 搭建一套框架,適用于微信小程序和H5

    安裝 Taro。可以在終端輸入以下命令進(jìn)行安裝: 創(chuàng)建項(xiàng)目。使用以下命令創(chuàng)建 Taro+Vue3 項(xiàng)目: 其中,myApp 是項(xiàng)目名稱。 進(jìn)入項(xiàng)目并啟動(dòng)。使用以下命令進(jìn)入項(xiàng)目并啟動(dòng): 注意,需要先進(jìn)入對(duì)應(yīng)的目錄再啟動(dòng)。 編寫代碼。在 src 目錄下編寫代碼,可以像使用 Vue 開發(fā) Web 應(yīng)用程

    2024年02月10日
    瀏覽(76)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包