js drag and drop table to realize content calculation

js drag and drop table to realize content calculation

This article example shares the specific code of js drag-and-drop table to realize content calculation for your reference. The specific content is as follows

Preface

  • Create a web version of Excel
  • H5 new features: draggable , contenteditable

Achieve Results

Code Implementation

index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Table</title>
    <style>
        table, th, tr, td {
            margin: 0;
            padding: 0;
            width: 800px;
            text-align: center;
            border: solid 1px #000;
        }

        td {
            width: auto;
            background-color: pink;
        }
        .ops {
            cursor: move;
        }
    </style>
</head>
<body>
<table id="table">
    <thead id="thead">
    <tr id="header">
        <th>1</th>
    </tr>
    </thead>
    <tbody id="tbody">

    </tbody>
</table>
<script src="main.js"></script>
</body>
</html>

main.js

createTable(10,10);
init();
// Table initialization // @param1: rows, number of rows // @param2: cols, number of columns function createTable(rows, cols) {
    let header = document.getElementById('header'),
        body = document.getElementById('tbody');

    for (let i = 0; i < rows; i ++) {
        let tmp = '',
            trEle = document.createElement('tr');
        for (let j = 0; j < cols; j ++) {
            //thead
            if (i <= 1){
                tmp += `<th>${j}</th>`;
            }
            else {
                tmp += `<td class="ops" draggable="true">${i}</td>`;
            }
        }
        // console.log(tmp);
        if (i <= 1) header.innerHTML = tmp;
        else{
            trEle.innerHTML = tmp;
            body.appendChild(trEle);
        }
    }
}

/*
* Table drag * */
function init(){
    let x,y,data;
    document.body.addEventListener('click', event=>{
        event.preventDefault();
    });

    document.body.addEventListener('dragstart', event => {
        if (event.target.nodeName.toLowerCase() !== 'td'){
            alert('Select the correct content');
            return false;
        }

        // console.log(event);
        x = event.clientX - 5,
        y = event.clientY - 5,
        data = parseInt(event.target.firstChild.data);
        let img = new Image();
        img.src = 'test.png';
        event.dataTransfer.setDragImage(img, 0,0);
        // console.log(x, y, data);
    });

    //Prevent default processing document.body.addEventListener('dragover', event => {
        event.preventDefault();
    });

    document.body.addEventListener('drop', event => {
        let tmp = new dragCalculation(x,y,data);
        let endX = event.clientX - 5,
            endY = event.clientY - 5,
            endData = parseInt(event.target.firstChild.data);
        // console.log(event.target.firstChild.data);
        // console.log(isNaN(endData))
        if (isNaN(endData)) {
            alert('Move position error');
            return false;
        }
        // console.log(endX, endY, endData);
        let result = tmp.sum(endX, endY, endData);
        event.target.firstChild.data = result;
        event.target.style.backgroundColor = '#b4e318'

    });
}

let dragCalculation = function (x, y, data) {
    this.startX = x;
    this.startY = y;
    this.startData = data;
};

dragCalculation.prototype.sum = function (x, y, data) {
    // Should be detailed boundary judgment if (this.startX == x ||
    this.startY == y ||
    isNaN(data)) {
        alert('Don't leave it there');
        return false;
    }

// Get and return data + this.startData;
}

The above is the full content of this article. I hope it will be helpful for everyone’s study. I also hope that everyone will support 123WORDPRESS.COM.

You may also be interested in:
  • js accurate countdown function sharing
  • Super accurate javascript method to verify ID number
  • js implements a simple calculator
  • JS implementation of Apple calculator
  • JavaScript simulation calculator
  • JavaScript to achieve simple calculator function
  • How to calculate the number of lines of text in JavaScript
  • JavaScript classic case simple calculator
  • js precise calculation

<<:  Detailed explanation of how to mount remote file systems via SSH on Linux

>>:  MySQL batch removes spaces in a certain field

Recommend

Use shell script to install python3.8 environment in CentOS7 (recommended)

One-click execution To install Python 3.8 in a vi...

Axios secondary encapsulation example Demo in the project

1. Why do packaging? Facilitates overall code cal...

Problem record of using vue+echarts chart

Preface echarts is my most commonly used charting...

The latest collection of 18 green style web design works

Toy Story 3 Online Marketing Website Zen Mobile I...

Correct steps to install Nginx in Linux

Preface If you are like me, as a hard-working Jav...

Install Docker environment in Linux environment (no pitfalls)

Table of contents Installation Prerequisites Step...

What does input type mean and how to limit input

Common methods for limiting input 1. To cancel the...

Detailed explanation of efficient MySQL paging

Preface Usually, a "paging" strategy is...

The new version of Chrome browser settings allows cross-domain implementation

Preface Currently, the front-end solves cross-dom...

Play with the connect function with timeout in Linux

In the previous article, we played with timeouts ...

Two ways to export csv in win10 mysql

There are two ways to export csv in win10. The fi...

Do designers need to learn to code?

Often, after a web design is completed, the desig...

Detailed explanation of DIV+CSS naming rules can help achieve SEO optimization

1. CSS file naming conventions Suggestion: Use le...