JavaScript利用el-table实现绘制热度表

实现效果

实现代码

<div class="gray w-full h-100 mt-4 table" v-if="props.brandId">
          <el-table :data="brandHotList" :header-cell-style="{
            'font-weight': 'normal',
            'background-color': '#f7f8f9',
          }" :cell-style="{ padding: '5px 0' }" :row-style="{ height: 30 }" fit class="showOrder">
            <el-table-column align="center" label="排名" width="55">
              <template #default="scope">
                <span class="index">{{ scope.$index + 1 }}</span>
              </template>
            </el-table-column>
            <el-table-column align="left" label="热门车系">
              <template #default="scope">
              <el-tooltip effect="dark" :content="scope.row.name || '--'" placement="top">
                <div class="lastName">{{ scope.row.name || '--'}}</div>
              </el-tooltip>
              </template>
            </el-table-column>
            <el-table-column align="center" label="热度" min-width="200">
              <template #default="scope">
                <div class="lastDiv" :style="
                  scope.row.total >= 0
                    ? 'text-align:left'
                    : 'text-align:center'
                " style="white-space: nowrap">
                  <span v-if="scope.row.total > 0" :style="`width:${(scope.row.total / brandHotList[0].total) * 83 + 0.5
                  }%;background:#ff454e`" class="length"></span>
                  <span class="count">{{ scope.row.total }}</span>
                </div>
              </template>
            </el-table-column>
          </el-table>
        </div>
<style>
.gray {
  background-color: #f7f8f9;
  border-radius: 8px;
}
.table {
  width: 100%;
  overflow: hidden;
  padding: 0 20px;
  .el-table {
    width: 100%;
    border: none;
    background-color: #f7f8f9;
    margin: 0;
    padding: 0;
    overflow: hidden;

    :deep(.el-table__empty-block) {
      background-color: #f7f8f9;
      margin-top: 105px;
    }

    :deep(.el-table__body) {
      td {
        border-bottom: none;
        font-size: 14px;
      }
    }

    ::before {
      height: 0;
    }
  }
  :deep(.index){
      font-family: DIN, DIN-Bold;
      font-weight: 700;
       color: #333333;
    }
  .length {
    display: inline-block;
    width: 80%;
    height: 12px;
    margin-right: 14px;
  }

  .lastDiv {
    display: block !important;
  }

  .count {
    white-space: nowrap;
    line-height: 12px;
  }

  .hot {
    display: flex;
    align-items: center;

    .num {
      margin-left: 5px;
      text-align: center;
    }
  }

  :deep(.groupName) {
    overflow: hidden;
    text-overflow: ellipsis;
    display: -webkit-box;
    -webkit-line-clamp: 1;
    -webkit-box-orient: vertical;
  }

  :deep(.el-table__header-wrapper) {
    margin-bottom: 12px;
    background-color: #f7f8f9;
  }

  :deep(th .cell) {
    font-size: 14px;
    font-weight: 400;
    color: #333;
  }

  :deep(.el-table th) {
    background-color: #f7f8f9 !important;
  }

  :deep(.el-table__row) {
    background-color: #f7f8f9;
  }
}
</style>

补充

除了绘制热度表,还可以绘制甘特图哦,下面就是示例代码

<template>
  <div class="hotelApply wl-gantt">
    <el-card>
      <el-table :data="tableData" border style="width: 100%" :class="dateTypeClass" row-key="id"
        :span-method="spanMethod" @cell-click="cellClick" :cell-style="cellStyle">
        <el-table-column prop="room" label="房间" align="center" width="140px" fixed="left" :show-overflow-tooltip="true">
        </el-table-column>
        <el-table-column prop="bedName" label="床位" align="center" width="120px" fixed="left"
          :show-overflow-tooltip="true">
        </el-table-column>
        <!-- mouth and day gantt -->
        <template v-if="self_date_type === 'monthAndDay'">
          <el-table-column :resizable="false" v-for="month in ganttTitleDate" :label="month.full_date" :key="month.id"
            align="center">
            <el-table-column class-name="wl-gantt-item" v-for="(day, dindex) in month.children" :resizable="false"
              :key="dindex" :label="day.name" width="60" align="center">
              <template v-slot="scope">
                <div :class="dayGanttType(scope.row, day.full_date)" @click="handleDay(scope.row)"></div>
                <div :class="realDayGanttType(scope.row, day.full_date)"></div>
                <!-- <div :class="selectedCell(scope.row)"></div> -->
              </template>
            </el-table-column>
          </el-table-column>
        </template>
      </el-table>
    </el-card>
    <!-- 右边抽屉 -->
    <el-drawer title="住房信息" :visible.sync="showDrawer" size='40%'>
      <div class="drawer_box">
        <el-form :model="drawerForm" :inline="true" label-width="100px">
          <el-form-item label="入住时间">
            <el-date-picker v-model="drawerForm.beginTime" type="date" placeholder="选择日期" value-format='yyyy-MM-dd'
              disabled>
            </el-date-picker>
          </el-form-item>
          <el-form-item label="退住时间">
            <el-date-picker v-model="drawerForm.endTime" type="date" placeholder="选择日期" value-format='yyyy-MM-dd'>
            </el-date-picker>
          </el-form-item>
        </el-form>
        <div style="text-align:center">
          <el-button type="primary" size="mini" @click="drawerConfirm"> 确定</el-button>
        </div>
      </div>
    </el-drawer>
  </div>
</template>

<script>
import dayjs from "dayjs" // 导入日期js
const uuidv4 = require("uuid/v4") // 导入uuid生成插件
import isBetween from "dayjs/plugin/isBetween"
import quarterOfYear from "dayjs/plugin/quarterOfYear"
dayjs.extend(quarterOfYear) //获取季度依赖
dayjs.extend(isBetween)
export default {
  name: "",
  data() {
    return {
      tableData: [
        {
          id: 1,
          room: "公寓101",
          bedName: "1号床",
          beginTime: "2021-08-03",
          endTime: "2021-08-4",
          liveList: [
            { beginTime: "2021-08-03", endTime: "2021-08-4" },
            { beginTime: "2021-08-06", endTime: "2021-08-8" },
          ],
        },
        {
          id: 2,
          room: "公寓101",
          bedName: "2号床",
          beginTime: "2021-08-04 00:00:00",
          endTime: "2021-08-5 00:00:00",
          liveList: [],
        },
        {
          id: 3,
          room: "公寓102",
          bedName: "1号床",
          beginTime: "2021-08-05 00:00:00",
          endTime: "2021-08-7 00:00:00",
          liveList: [],
        },
        {
          id: 4,
          room: "公寓102",
          bedName: "2号床",
          beginTime: "2021-08-01 00:00:00",
          endTime: "2021-08-3 00:00:00",
          liveList: [],
        },
        {
          id: 5,
          room: "公寓103",
          bedName: "1号床",
          beginTime: "2021-08-06 00:00:00",
          endTime: "2021-08-8 00:00:00",
          liveList: [],
        },
        {
          id: 6,
          room: "公寓103",
          bedName: "2号床",
          beginTime: "2021-08-7 00:00:00",
          endTime: "2021-08-9 00:00:00",
          liveList: [],
        },
      ],
      showDrawer: false, //抽屉
      drawerForm: {},
      // 甘特图
      self_start_date: "2021-08-01", // 项目开始时间
      self_end_date: "2021-09-30", // 项目结束时间
      self_start_date_day: "", //项目开始时间的日期
      self_start_date_month: "", //项目开始时间的月份
      self_start_date_year: "", //项目开始时间的年份
      self_date_type: "monthAndDay", // 自身日期类型
    }
  },
  created() {},
  mounted() {
    this.initTime() //初始化时间1
  },
  computed: {
    // 甘特图标题日期分配
    ganttTitleDate() {
      // 分解开始和结束日期
      let start_date_spilt = dayjs(this.self_start_date)
        .format("YYYY-M-D")
        .split("-")
      let end_date_spilt = dayjs(this.self_end_date)
        .format("YYYY-M-D")
        .split("-")
      let start_year = Number(start_date_spilt[0])
      let start_mouth = Number(start_date_spilt[1])
      let end_year = Number(end_date_spilt[0])
      let end_mouth = Number(end_date_spilt[1])
      console.log("日期类型", this.self_date_type)
      if (this.self_date_type === "monthAndDay") {
        return this.mouthAndDayTitleDate(
          start_year,
          start_mouth,
          end_year,
          end_mouth
        )
      }
    },
    // 树表配置项
    selfProps() {
      return {
        hasChildren: "hasChildren", // 字段来指定哪些行是包含子节点
        children: "children", // children字段来表示有子节点
        name: "name", // 任务名称字段
        id: "id", // id字段
        pid: "pid", // pid字段
        startDate: "beginTime", // 开始时间字段
        endDate: "endTime", // 结束时间字段
        realStartDate: "recordBeginTime", // 实际开始时间字段
        realEndDate: "recordEndTime", // 实际结束时间字段
        identityId: "identityId",
        parents: "parents",
        pre: "pre", // 前置任务字段【注意:如果使用recordParents,则pre值应是目标对象的identityId字段(可配置)】
        // ...this.props
      }
    },
    // 根据日期类型改样式
    dateTypeClass() {
      if (this.self_date_type === "monthAndDay") {
        return "month-and-day"
      }
      return ""
    },
  },
  components: {},
  methods: {
    // =====================表格事件==================
    // 单元格点击
    cellClick(row, column, cell, event) {
      // console.log(row, column, cell, event);
    },
    // 单元格样式
    cellStyle({ row, column, rowIndex, columnIndex }) {},
    // 预定者点击
    handleDay(row) {
      console.log(row)
      this.showDrawer = true
      this.drawerForm = Object.assign({}, row)
    },
    // 模态框确定
    drawerConfirm() {
      this.tableData.forEach((item) => {
        if (item.id == this.drawerForm.id) {
          this.$set(item, "beginTime", this.drawerForm.beginTime)
          this.$set(item, "endTime", this.drawerForm.endTime)
        }
      })
      this.showDrawer = false
    },
    // =====================甘特区域==================
    //维度展示形式
    changedateType(val) {
      console.log(val)
      this.getDataList()
    },
    reload() {
      this.isRouterAlive = false
      this.$nextTick(() => (this.isRouterAlive = true))
    },
    // 初始化时间
    initTime() {
      this.self_start_date_year = this.self_start_date.split("-")[0]
      this.self_start_date_month = this.self_start_date.split("-")[1]
      this.self_start_date_day = this.self_start_date.split("-")[2]
      this.self_start_date_day =
        this.self_start_date_day > 2
          ? this.self_start_date_day - 1
          : this.self_start_date_day
      console.log("开始-结束", this.self_start_date, this.self_end_date)
    },
    // 设置dateType
    setDataType(type) {
      this.self_date_type = type
    },
    /**
     * 当前日期gantt状态
     * row: object 当前行信息
     * date: string 当前格子日期
     * unit: string 时间单位,以天、月、年计算
     */
    dayGanttType(row, date, unit = "days") {
      // let start_date = row[this.selfProps.startDate]
      // let end_date = row[this.selfProps.endDate]
      let start_date = row[this.selfProps.startDate]
      let end_date = row[this.selfProps.endDate]
      // 若没有时间则不显示
      if (!start_date || !end_date) {
        return
      }
      let between = dayjs(date).isBetween(start_date, end_date, unit)
      if (between) {
        return "wl-item-on"
      }
      let start = dayjs(start_date).isSame(date, unit)
      let end = dayjs(end_date).isSame(date, unit)
      if (start && end) {
        return "wl-item-on wl-item-full"
      }
      if (start) {
        return "wl-item-on wl-item-start"
      }
      if (end) {
        return "wl-item-on wl-item-end"
      }
    },
    /**
     * 实际日期gantt状态
     * row: object 当前行信息
     * date: string 当前格子日期
     * unit: string 时间单位,以天、月、年计算
     */
    realDayGanttType(row, date, unit = "days") {
      let start_date = row[this.selfProps.realStartDate]
      let end_date = row[this.selfProps.realEndDate]
      // 若没有实际时间则不显示
      if (!start_date || !end_date) {
        return
      }
      let between = dayjs(date).isBetween(start_date, end_date, unit)
      if (between) {
        return "wl-real-on"
      }
      let start = dayjs(start_date).isSame(date, unit)
      let end = dayjs(end_date).isSame(date, unit)
      if (start && end) {
        return "wl-real-on wl-real-full"
      }
      if (start) {
        return "wl-real-on wl-real-start"
      }
      if (end) {
        return "wl-real-on wl-real-end"
      }
    },
    // 点击选中单元格
    selectedCell(row) {},
    // 以下是表格-日期-gantt生成函数----------------------------------------生成gantt表格-------------------------------------
    /**
     * 月-日模式gantt标题
     * start_year: 起始年
     * start_mouth:起始月
     * end_year:结束年
     * end_mouth:结束月
     */
    mouthAndDayTitleDate(start_year, start_mouth, end_year, end_mouth) {
      // 处理年份
      let year_diff = end_year - start_year
      // 只存在同年或前后年的情况
      if (year_diff === 0) {
        // 年间隔为同一年
        let isLeap = this.isLeap(start_year) // 是否闰年
        let mouths = this.generationMonths(
          start_year,
          start_mouth,
          end_mouth + 1,
          isLeap
        ) // 处理月份
        return mouths
      }
      // 处理开始月份
      let startIsLeap = this.isLeap(start_year)
      let start_mouths = this.generationMonths(
        start_year,
        start_mouth,
        13,
        startIsLeap
      )
      // 处理结束月份
      let endIsLeap = this.isLeap(end_year)
      let end_mouths = this.generationMonths(
        end_year,
        1,
        end_mouth + 1,
        endIsLeap
      )
      return start_mouths.concat(end_mouths)
    },
    /**
     * 生成月份函数
     * year: Number 当前年份
     * start_num: Number 开始月分
     * end_num:Number 结束月份
     * isLeap: Boolean 是否闰年
     * insert_days: Boolean 是否需要插入 日
     * week: 是否以周的间隔
     */
    generationMonths(
      year,
      start_num = 1,
      end_num = 13,
      isLeap = false,
      insert_days = true,
      week = false
    ) {
      let months = []
      if (insert_days) {
        // 需 日 的模式
        for (let i = start_num; i < end_num; i++) {
          // 需要 日 的模式
          let days = this.generationDays(year, i, isLeap, week)
          months.push({
            name: `${i}月`,
            date: i,
            full_date: `${year}-${i}`,
            children: days,
            id: uuidv4(),
          })
        }
        return months
      }
      for (let i = start_num; i < end_num; i++) {
        // 无需要 日 的模式
        months.push({
          name: `${i}月`,
          date: i,
          full_date: `${year}-${i}`,
          id: uuidv4(),
        })
      }
      return months
    },
    /**
     * 生成日期函数
     * year: Number 当前年份
     * month: Number 当前月份
     * isLeap: Boolean 是否闰年
     * week: Boolean 是否间隔一周
     */
    generationDays(year, month, isLeap = false, week = false) {
      let big_month = [1, 3, 5, 7, 8, 10, 12].includes(month)
      let small_month = [4, 6, 9, 11].includes(month)
      let dates_num = big_month ? 32 : small_month ? 31 : isLeap ? 30 : 29
      let days = []
      if (week) {
        let _day = 1 // 从周日开始
        let _start_day_inweek = this.timeInWeek(`${year}-${month}-1`)
        if (_start_day_inweek !== 0) {
          _day = 8 - _start_day_inweek
        }
        for (let i = _day; i < dates_num; i += 7) {
          days.push({
            date: i,
            name: `${i}日`,
            id: uuidv4(),
            full_date: `${year}-${month}-${i}`,
          })
        }
      } else {
        //第一个月
        if (
          year == this.self_start_date_year &&
          month == this.self_start_date_month
        ) {
          for (let i = this.self_start_date_day; i < dates_num; i++) {
            days.push({
              date: i,
              name: `${i}日`,
              id: uuidv4(),
              full_date: `${year}-${month}-${i}`,
            })
          }
          //非第一个月
        } else {
          for (let i = 1; i < dates_num; i++) {
            days.push({
              date: i,
              name: `${i}日`,
              id: uuidv4(),
              full_date: `${year}-${month}-${i}`,
            })
          }
        }
      }
      return days
    },
    /**
     * 是否闰年函数
     * year: Number 当前年份
     */
    isLeap(year) {
      return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
    },
    // 以下是时间计算类函数 ------------------------------------------------------时间计算---------------------------------------
    /**
     * 时间格式化函数
     * date 需要格式化的数据
     * format 格式化的格式
     */
    timeFormat(date, format = "YYYY-MM-DD") {
      return date ? dayjs(date).format(format) : this.emptyCellText
    },
    /**
     * 查询时间是周几
     */
    timeInWeek(date) {
      return dayjs(date).day()
    },
    // 合并单元格
    spanMethod({ row, column, rowIndex, columnIndex }) {
      if (columnIndex === 0) {
        const key = "room"

        const list = this.tableData

        let len = list.filter((item) => row[key] === item[key]).length

        let firstIndex = -1
        for (let i = 0; i < this.tableData.length; i++) {
          const element = this.tableData[i]
          if (columnIndex === 0 && row[key] === element[key]) {
            firstIndex = i
            break
          }
        }
        if (rowIndex == firstIndex) {
          return {
            rowspan: len,
            colspan: 1,
          }
        }
        if (rowIndex > firstIndex && rowIndex < firstIndex + len) {
          return {
            rowspan: 0,
            colspan: 0,
          }
        }
      }
    },
  },
  watch: {},
}
</script>

<style lang="scss">
.hotelApply {
  padding-top: 10px;
  .legend-plan,
  .legend-real {
    display: inline-block;
    width: 40px;
    height: 6px;
    border-radius: 3px;
    background: #00cbed;
  }
  .legend-real {
    background: #fcc300;
  }
  .selected-cell {
    border: 1px solid #00cbed;
  }
  .drawer_box {
    padding: 20px;
  }
}
</style>
<style lang="scss">
.el-table >>> th.gutter {
  display: table-cell !important;
}

.el-table >>> colgroup.gutter {
  display: table-cell !important;
}
// 鼠标悬浮去除阴影
.el-table tbody tr:hover > td {
  background-color: #fff !important;
}
</style>
<style lang="scss">
$gantt_item: 18px;
$gantt_item_half: 4px;

.wl-gantt {
  .wl-gantt-header > th {
    text-align: center;
  }

  .h-full {
    height: 100%;
  }

  .wl-gantt-item {
    position: relative;
    transition: all 0.3s;
    > .cell {
      padding: 0;
    }
  }

  .u-full.el-input {
    width: 100%;
  }

  // 计划时间gantt开始
  .wl-item-on {
    position: absolute;
    top: 40%;
    left: 0;
    right: -1px;
    margin-top: -$gantt_item_half;
    height: $gantt_item;
    background: #00cbed;
    transition: all 0.4s;
    cursor: pointer;
  }

  .wl-item-start {
    left: 10%;
    &:after {
      position: absolute;
      top: 0;
      left: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #00cbed;
    }
  }

  .wl-item-end {
    right: 10%;
    &:after {
      position: absolute;
      top: 0;
      right: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #00cbed;
    }
  }

  .wl-item-full {
    left: 5px;
    right: 5px;
    &:before {
      position: absolute;
      top: 0;
      left: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #00cbed;
    }
    &:after {
      position: absolute;
      top: 0;
      right: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #00cbed;
    }
  }
  // 计划时间gantt结束

  // 实际时间gantt开始
  .wl-real-on {
    position: absolute;
    top: 75%;
    left: 0;
    right: -1px;
    margin-top: -$gantt_item_half;
    height: $gantt_item;
    background: #fcc300; //rgba(250, 167, 146, .6);
    transition: all 0.4s;
  }
  .wl-real-start {
    left: 50%;
    &:after {
      position: absolute;
      top: 0;
      left: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #fcc300;
    }
  }

  .wl-real-end {
    right: 50%;
    &:after {
      position: absolute;
      top: 0;
      right: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #fcc300;
    }
  }

  .wl-real-full {
    left: 5px;
    right: 5px;
    &:before {
      position: absolute;
      top: 0;
      left: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #fcc300;
    }
    &:after {
      position: absolute;
      top: 0;
      right: -5px;
      z-index: 1;
      content: "";
      width: 8px;
      height: 18px;
      border-radius: 50%;
      background: #fcc300;
    }
  }
  // 实际时间gantt结束

  // 名称列
  .name-col {
    position: relative;
    &:hover .name-col-edit {
      display: inline-block;
    }

    .name-col-edit {
      display: none;
      position: absolute;
      right: 0;
    }

    .name-col-icon {
      padding: 6px 3px;
      cursor: pointer;
      font-size: 16px;
    }

    .task-remove {
      color: #f56c6c;
    }
    .task-add {
      color: #409eff;
    }
  }
}
//季度展示、月度展示、周展示
.year-and-quarter,
.year-and-month,
.year-and-week {
  .wl-item-start {
    left: 5%;
  }
  .wl-item-end {
    right: 5%;
  }
  .wl-item-full {
    left: 5%;
    right: 10%;
  }
  .wl-real-full {
    left: 10%;
    right: 5%;
  }
}
</style>

效果图

到此这篇关于JavaScript利用el-table实现绘制热度表的文章就介绍到这了,更多相关JavaScript el-table热度表内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • el-table表格动态合并行及合并行列实例详解

    目录 前言 1.合并行 2.合并行列 总结 前言 在写项目的时候有时候会经常遇到把行和列合并起来的情况,因为有些数据是重复渲染的,不合并行列会使表格看起来非常的混乱,如下: 而我们想要的数据是下面这种情况,将重复的行进行合并,使表格看起来简单明了,如下: 1.合并行 所谓的合并行就是将多行相同的数据变成一行来显示,直接上代码,页面的布局比较简单 <template> <div class="table"> <el-table :data="tab

  • vue 使用el-table循环生成表格的过程

    目录 使用el-table循环生成表格 el-table 动态循环el-table的列 使用el-table循环生成表格 el-table vue项目中使用element框架,提供的table组件使用起来过于繁杂,改成配置模式,循环生成表格! 配置前: 配置后: 动态循环el-table的列 <template>   <div class="hello">     <EncapTable ref="items" :Data="

  • 详解el-table表头文字换行的三种方式

    目录 问题描述 效果图 三种方式的代码 总结 问题描述 表格中的表头一般都是不换行的,不过有时候在某些业务场景中,需要让表头的文字换行展示一下,我们先看一下效果图 效果图 三种方式的代码 看注释就行啦. 演示的话,直接复制粘贴运行就行啦 <template> <div class="vueWrap"> <el-table style="width: 900px" :data="tableBody" border :h

  • vue 使用el-table循环轮播数据列表的实现

    目录 使用el-table循环轮播数据列表 vue el-table简单轮播 使用el-table循环轮播数据列表 因为是在内网开发,安装插件导包进去非常麻烦,有条件的可以去下载插件实现,咱这里贴一下手撸的代码. 需要实现的效果大抵如下:(手机拍的,有些糊) 大部分实现的是监听是否到了div的底部,如果到了底部,就直接跳到顶部,这种体验感不是特别好,没有达到轮播的真正效果. 表格数据,devData我绑定了个空数组,因为实在是懒得敲了,按道理排名也应该是从api获取,而不是拿index. <te

  • JavaScript利用el-table实现绘制热度表

    实现效果 实现代码 <div class="gray w-full h-100 mt-4 table" v-if="props.brandId"> <el-table :data="brandHotList" :header-cell-style="{ 'font-weight': 'normal', 'background-color': '#f7f8f9', }" :cell-style="{

  • JavaScript利用canvas绘制流星雨效果

    目录 前言 需求分析 实现过程 1.绘制满天繁星 2.满天繁星闪起来 3.绘制流星 4.流星划过夜空 5.流星雨 6.merge视觉盛宴 前言 最近总是梦见一些小时候的故事,印象最深刻的就是夏天坐在屋顶上,看着满天的繁星,一颗,两颗,三颗...不由自主地开始了数星星的过程.不经意间,一颗流星划过夜间,虽然只是转瞬即逝,但它似乎比夜空中的其它繁星更吸引着我.听老人说,看见流星的时候许愿,愿望是可以实现的,此时早已把数星星抛之脑后,开始期待着下一颗流星的出现.但是那天晚上,流星再也没有出现,这也成了

  • React如何利用Antd的Form组件实现表单功能详解

    一.构造组件 1.表单一定会包含表单域,表单域可以是输入控件,标准表单域,标签,下拉菜单,文本域等. 这里先引用了封装的表单域 <Form.Item /> 2.使用Form.create处理后的表单具有自动收集数据并校验的功能,但如果不需要这个功能,或者默认的行为无法满足业务需求,可以选择不使用Form.create并自行处理数据 经过Form.create()包装过的组件会自带this.props.form属性,this.props.form提供了很多API来处理数据,如getFieldDe

  • 利用Python批量导出mysql数据库表结构的操作实例

    目录 前言 解决方法 1. mysql 数据库 表信息查询 2.连接数据库代码 3.数据查询处理代码 3.0 配置信息 3.1查询数据库表 3.2 查询对应表结构 3.3 pandas进行数据保存导出excel 补充:python脚本快速生成mysql数据库结构文档 总结 前言 最近在公司售前售后同事遇到一些奇怪的需求找到我,需要提供公司一些项目数据库所有表的结构信息(字段名.类型.长度.是否主键.***.备注),虽然不是本职工作,但是作为python技能的拥有者看到这种需求还是觉得很容易的,但

  • 手把手教你用python绘制热度图(heatmap)

    目录 1.简单的代码 2.添加X轴和Y轴标签和标题: 3.对右侧的色条(colorbar)进行调整: 4.修改色条的刻度值和标签的字体大小.颜色: 5.对热度图显示数值和添加网格线: 6. 定义热度图的配色板 总结 1.简单的代码 from matplotlib import pyplot as plt import seaborn as sns import numpy as np import pandas as pd #练习的数据: data=np.arange(25).reshape(5

  • JavaScript利用Canvas实现粒子动画倒计时

    目录 canvas 粒子动画介绍 何为canvas 粒子动画是啥 canvas 定义初始变量 初始化canvas和数字文本 创建一定数量的点 倒计时 倒计时文本绘画 循环绘制 点动画 效果图 canvas 粒子动画介绍 何为canvas canvas是HTML5中新增的一个标签,主要是用于网页实时生成图像并可操作图像,它是用JavaScript操作的bitmap. 粒子动画是啥 粒子动画就是页面上通过发射许多微小粒子来表示不规则模糊物体,比如:用小圆点来模拟下雪.下雨的效果,用模糊线条模拟黑客帝

  • 纯javascript的ajax实现php异步提交表单的简单实例

    很多时候需要异步提交表单,当表单太多是时候,一个个getElementById变得很不实际 当然,jquery可以实现异步提交表单,jquery.form.js这个库貌似也挺流行 只是有时候并不想使用额外的库,所以就琢磨着自己写,用纯js来实现异步提交表单 实现如下(本例用POST方式提交,用php作为服务器脚本) HTM L文件:test <html> <head> <script type="text/javascript" src="nam

  • 用JavaScript动态建立或增加CSS样式表的实现方法

    1.简单的方法,不管不顾,直接这样就可以: document.createStyleSheet().cssText = '标签{color:red;' + // 这个注释只在当前JS中帮助理解,并不会写入CSS中 'width:300px;height:150px}' + '.类名{--}' + '#ID们{--}' ; //完活.我喜欢分号这样写,和指令书写的起始位置对齐比较好一点,尤其是后面有其它语句的时候. 2.完善一点的方法,防止重复添加,可以通过添加样式表ID并对其判断来实现: if

  • PHP利用超级全局变量$_POST来接收表单数据的实例

    利用$_POST超级全局变量接收表单的数据,然后利用echo输出到页面. 下面是代码: <!doctype html> <html> <head> <title>利用超级全局变量$_POST接收表单</title> <meta http-equiv="content-type" contnet="text/html" charset="utf-8"/> </head&g

  • PHP利用超级全局变量$_GET来接收表单数据的实例

    我们在linux上用 touch php_get.html php_get.php创建两个文件. php_get.html文件的代码如下: <!doctype html> <html> <head> <title>超级全局变量$_GET来接收提交的数据,然后返回信息</title> <meta http-equiv="contnet-type" content="text/htm" charset=&

随机推荐