GithubHelp home page GithubHelp logo

fanlion / canvastable Goto Github PK

View Code? Open in Web Editor NEW

This project forked from xwinstone/canvastable

0.0 0.0 0.0 11.03 MB

a table that display mass of data for web with fastest speed.

License: MIT License

Shell 0.08% JavaScript 7.19% TypeScript 87.83% HTML 1.90% SCSS 3.00%

canvastable's Introduction

canvas-table

English | δΈ­ζ–‡

a table component got the highest performance that works on canvas! πŸš€

14.7kb gizped, no dependency!

80 columns & 100,000 rows data:

100000*80

Feature

  • high performance works on canvas. πŸš€
  • event support. such as click, mouseenter, mouseleave, etc. ✨
  • custom style config. πŸ’„
  • custom icon support. πŸ‘
  • tooltip for every component. πŸ”Ž
  • write with typescript. πŸ‘”
  • you can even create your own component to display!!! πŸ’–

! it's just like a table implement on dom!

Examples

  • basic usage: demo
  • display 100000 records: demo
  • load remote data with scroll: demo
  • fixed header (setting by default, can't change yet)
  • fixed columns: demo
  • grouping table head: demo
  • custom style: demo
  • render icon component: demo

Usage

import

  1. use npm
npm i x-canvas-table
  1. use cdn
<script src="https://unpkg.com/x-canvas-table/umd/canvastable.min.js"></script>

basic usage

<div id="container"></div>
import CanvasTable from "x-canvas-table";

const columns = [
  {title: 'avatar', dataIndex: 'avatar'},
  {title: 'name',dataIndex: 'name'},
  {title: 'age', dataIndex: 'age'},
  {title: 'address', dataIndex: 'address'}
]
const dataSource = [
  {avatar: 'πŸŽ…πŸ»',name: 'chuanJianGuo', age: 74, address: 'America'},
  {avatar: 'πŸ‘΅πŸ»', name: 'caiEnglish', age: 63, address: 'China Taiwan'},
  {avatar: '-',name: 'trump', age: 74, address: 'America'},
  {avatar: '-',name: 'johnson', age: 70, address: 'England'}
]
const ct = new CanvasTable({
  container: document.getElementById('container'),
  columns: columns,
  style: { height: 500, width: '100%' }
})

ct.source = dataSource;

result: basic usage

online demo: click

API

CanvasTable

Property Description Type Default
container Container element for table HTMLElement -
columns Columns of table IColumnProps[] -
source Data record array to be displayed object[] -
style Style for table ITableStyleProps see ITableStyleProps
onScrollLoad Callback executed when table scroll to bottom(scrollLoadHeight) () => Promise<any> -
scrollLoadHeight distance to trigger onScrollLoad number 150
onRow Set event props on per row ITableEventHandler -

IColumnProps

One of the Table columns prop for describing the table's columns.

Property Description Type Default
dataIndex Display field of the data record object[] -
title Title of this column string -
align The specify which way that column is aligned 'left'|'right' | 'center' 'left'
popTitle tooltip for table header cell string -
width Width of this column number 150
children Group table head IColumn[] -
fixed Set column to be fixed 'left' | 'right' -
render custom render (value, record) => string | Layer -
onCell Set event props on per cell ITableEventHandler -

ITableStyleProps

You can custom your table style use this prop

Property Description Type Default
width width of table number | string 100%
height height of table number | string 100%
rowHeight height of each row number 55
columnWidth default width of all columns number 150
borderColor color of border string '#e8e8e8'
textColor color of text string 'rgba(0,0,0,0.65)'
fontSize font size string 14px
fontFamily font family string -
padding both left and right padding of table cell number 16
headerBackColor background color of header cell string '#fafafa'
headerRowHeight height of header cell number 55

onRow usage

Event binding, same as onRow and onCell

interface ITableEventHandler {
    (record: object, rowIndex: number): {
        onClick?: (event) => void,       // onClick Event
        onDoubleClick?: (event) => void, // Double Click
        onContextMenu?: (event) => void, // Right click Event
        onMouseEnter?: (event) => void,  // Mouse Enter
        onMouseLeave?: (event) => void,  // Mouse Leave
    }
}
// Example:
new CanvasTable({
    onRow: (record, rowIndex) => {
        onClick: () => { alert(`${rowIndex} row clicked`) }
    }
})

Layer Component

it's the basic component in canvas table. you can think it as a div in HTML, it usually used on render property of IColumn interface. you can use it to build a complex component to render.

let's see what we can do.

Property Description Type Default
style style of layer ILayerStyleProps -
event event on layer IEventCollection -
popTitle set title attribute a canvas element string -
children children of layer Layer[] -

ILayerStyleProps

if you know css, you will know how to use it immediately.

interface ILayerStyleProps {
  top?: number // assume it's top attribute and when position: absolute
  left?: number // assume it's left attribute and when position: absolute
  width?: number | string // number for px, string for percentage of parent
  height?: number | string  // number for px, string for percentage of parent
  padding?: number | number[]  // same as css
  color?: string               // same as css
  backgroundColor?: string;    // same as css
  border?: string | string[]   // same as css
  fontFamily?: string          // same as css
  fontSize?: string            // same as css
  fontWeight?: 'normal' | 'bold' 
  zIndex?: number              // same as css
  align?: 'left' | 'center' | 'right'
  overflow?: 'hidden' | 'ellipsis'
}

example creating complex render: demo

the following components is all derived from Layer.

Render A Icon Component

it's provide a Svg Component to support rendering svg file,

How to use?

step 1: import svg file && Svg component

import Home from '@/assets/svg/home.svg'
const { Svg } = CanvasTable

step 2: use render property in columns

const columns = [
  {
    title: 'Action',
    render: () => {
      return new Svg({
        popTitle: 'click me',
        path: Home,
        style: {width: 30, height: 30, color: '#1890ff'},
        event: {
          onClick: () => {alert('button click')}
        }
      })
    }
  }
]

full example: demo

Text Component

Property Description Type Default
text text to show string -

canvastable's People

Contributors

xwinstone avatar xiewentong-bst avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    πŸ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. πŸ“ŠπŸ“ˆπŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❀️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.