js各种实际场景的使用案例合集(四)

1、元素拖拽

场景1:sortablejs实现el-table行数据拖拽

场景结果

代码示例

<template>
  <div class="test">
    <el-table :data="tableData" style="width: 80%" border row-index>
      <el-table-column type="index"></el-table-column>
      <el-table-column prop="name" label="名称"></el-table-column>
      <el-table-column prop="price" label="单价"></el-table-column>
      <el-table-column prop="num" label="数量" width="150"></el-table-column>
    </el-table>
  </div>
</template>

<script>
import Sourtable from 'sortablejs';

export default {
  name: 'EltableNumber',
  data() {
    return {
      tableData:[
        {
          name:'fdgfb',
          price:24.87,
          num:0,

        },
        {
          name:'ukium',
          price:54.76,
          num:0,

        },
        {
          name:'bn',
          price:35.6,
          num:0,

        },
        {
          name:'ry',
          price:38,
          num:0,

        },
        {
          name:'nrh',
          price:7.35,
          num:0,

        },
      ],
    };
  },
  mounted(){
    this.rowDrag();
  },
  methods: {
    rowDrag(){
      let tbody = document.querySelector(".test .el-table__body-wrapper tbody");
      Sourtable.create(tbody, {
        group: { // 相同的组之间可以相互拖拽
          name: "table",
          pull: true,
          put: true,
        },
        animation: 150, // ms, number 单位:ms,定义排序动画的时间
        onAdd: function (e) {
          // 拖拽时候添加有新的节点的时候发生该事件
          console.log("onAdd.foo:", e);
        },
        onUpdate: function (e) {
          // 拖拽更新节点位置发生该事件
          console.log("onUpdate.foo:", e);
        },
        onRemove: function (e) {
          // 删除拖拽节点的时候促发该事件
          console.log("onRemove.foo:", e);
        },
        onStart: function (e) {
          // 开始拖拽出发该函数
          console.log("onStart.foo:", e);
        },
        onSort: function (e) {
          // 发生排序发生该事件
          console.log("onUpdate.foo:", e);
        },
        onEnd(e) {
          // 结束拖拽
          console.log("结束表格拖拽", e);
          // 如果拖拽结束后顺序发生了变化,则对数据进行修改
          if (e.oldIndex !== e.newIndex) {
            console.log("旧序号;", e.oldIndex + 1, "新序号:", e.newIndex + 1) // 排序后和后端的交互函数
          }
        },
      });
    },
  },
};
</script>

2、随机数

场景1:随机生成4位不重复的数

场景结果

代码示例

<template>
  <div>
    <span class="r-text m-right">{{num}}</span>
    <span class="b-text" @click="reGetNum">重新获取</span>
  </div>
</template>

<script>
export default {
  name: 'RandomNum',
  data() {
    return {
      num:'3565',
    };
  },
  methods: {
    // 重新获取密码
    reGetNum(){
      let randomNum;
      do {
        randomNum = Math.floor(Math.random() * 10000);
      } while(randomNum.toString() === this.num.toString())
      this.num= randomNum.toString().padStart(4,'0');
    },
  },
};
</script>

<style scoped lang="scss">
.r-text{
  color: #FC4F49;
}
.b-text{
  color: #0066FF;
  cursor: pointer;
}
.m-right{
  margin-right: 12px;
}
</style>

3、对象属性完全相等

场景1:判断两个对象的所有属性值是否相等,如果全部相等则执行下一步操作

代码示例

function deepEqual(a, b) {  
    if (a === b) return true;  
  
    if (a == null || b == null) return false;  
  
    if (a.constructor !== b.constructor) return false;  
  
    // 处理日期和正则表达式对象  
    if (a.prototype !== b.prototype) return false;  
  
    let length, i, keysA, keysB, subKey;  
  
    // 如果两个对象都是对象或数组,比较它们的长度和属性  
    if (Array.isArray(a)) {  
        length = a.length;  
        if (length !== b.length) return false;  
  
        for (i = 0; i < length; i++) {  
            if (!deepEqual(a[i], b[i])) return false;  
        }  
        return true;  
    } else if (typeof a === 'object') {  
        keysA = Object.keys(a);  
        keysB = Object.keys(b);  
  
        if (keysA.length !== keysB.length) return false;  
  
        for (i = 0; i < keysA.length; i++) {  
            subKey = keysA[i];  
            if (!(subKey in b)) return false;  
            if (!deepEqual(a[subKey], b[subKey])) return false;  
        }  
        return true;  
    }  
  
    // 基本数据类型比较  
    return a !== a && b !== b; // 处理 NaN  
}  
  
// 使用示例  
const obj1 = { a: 1, b: { c: 2 }, d: [3, 4] };  
const obj2 = { a: 1, b: { c: 2 }, d: [3, 4] };  
const obj3 = { a: 1, b: { c: 3 }, d: [3, 4] };  
  
if (deepEqual(obj1, obj2)) {  
    console.log('obj1 和 obj2 完全相等,执行下一步操作');  
} else {  
    console.log('obj1 和 obj2 不相等');  
}  
  
if (deepEqual(obj1, obj3)) {  
    console.log('obj1 和 obj3 完全相等');  
} else {  
    console.log('obj1 和 obj3 不相等');  
}

4、小数取整

场景1:num1 = 9.74、num2 = -9.74进行取整

代码示例

<script>
export default {
  name: 'DecimalRound',
  data() {
    return {
      num1: 9.74,
      num2: -9.74,
      newNum1: null,
      newNum2: null,
    };
  },
  created(){
    this.setNum();
  },
  methods: {
    setNum(){
      // 法①:Math.floor()
      this.newNum1 = Math.floor(this.num1);
      console.log(this.newNum1);//9
      this.newNum2 = Math.floor(this.num2);
      console.log(this.newNum2);//-10

      // 法②:Math.ceil()
      this.newNum1 = Math.ceil(this.num1);
      console.log(this.newNum1);//10
      this.newNum2 = Math.ceil(this.num2);
      console.log(this.newNum2);//-9
      
      // 法③:Math.round()
      this.newNum1 = Math.round(this.num1);
      console.log(this.newNum1);//10
      this.newNum2 = Math.round(this.num2);
      console.log(this.newNum2);//-10

      // 法④:Math.trunc()
      this.newNum1 = Math.trunc(this.num1);
      console.log(this.newNum1);//9
      this.newNum2 = Math.trunc(this.num2);
      console.log(this.newNum2);//-9

      // 法⑤:Number.prototype.toFixed()
      this.newNum1 = parseFloat(this.num1.toFixed(0));
      console.log(this.newNum1);//10
      this.newNum2 = parseFloat(this.num2.toFixed(0));
      console.log(this.newNum2);//-10

      // 法⑥:位运算符
      this.newNum1 = this.num1 | 0;
      console.log(this.newNum1);//9
    },
  },
};
</script>

方法解析

  • Math.floor() 方法:返回小于/等于给定数的最大整数。对于负数,会返回更小的整数
  • Math.ceil() 方法:返回大于/等于给定数的最小整数。对于负数,会返回更大的整数
  • Math.round() 方法:返回最接近给定数的整数。如果数字的小数部分恰好为0.5,则结果将四舍五入到最接近的偶数
  • Math.trunc() 方法:移除一个数的小数部分,返回整数部分
  • toFixed() 方法:不是直接取整,但可以将数字四舍五入到指定的小数位数,并返回一个字符串。然后结合 parseFloat() 或 Number() 方法
  • 位运算符:对于正数,可以使用 << 和 >> 进行取整(但这种方法只适用于32位整数范围内的正数)
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue.js 是一种流行的 JavaScript 前端框架,用于构建交互式的单页面应用程序 (SPA)。它以简洁、易用和灵活的特点而受到开发者的喜爱。下面是关于 Vue.js 的简要介绍、使用场景案例: 1. 简要介绍:Vue.js 是一个渐进式框架,它通过使用组件化开发和响应式数据绑定的方式,使构建交互式前端应用程序更加简单和高效。Vue.js 的核心库非常轻量级,可以逐步引入其他功能模块,例如路由、状态管理等,以满足不同项目的需求。 2. 使用场景Vue.js 适用于各种前端开发场景,包括单页面应用程序 (SPA)、多页面应用程序、移动应用程序、桌面应用程序等。由于 Vue.js 的易用性和灵活性,它被广泛用于构建各种规模的项目,从小型个人网站到大型企业级应用程序。 3. 案例:以下是一些使用 Vue.js 的著名案例实际应用场景: - Alibaba(阿里巴巴):Vue.js 在阿里巴巴旗下的一些项目中得到广泛应用,如支付宝、淘宝等。 - Xiaomi(小米):小米的官方网站和一些移动应用程序中使用Vue.js。 - Bilibili(哔哩哔哩):Vue.js 是 Bilibili 弹幕视频网站的核心技术之一。 - GitLab:GitLab 是一个基于 Vue.js 构建的开源代码托管平台。 - Laravel:Laravel 是一个流行的 PHP Web 开发框架,它的后台管理界面使用Vue.js。 这些案例展示了 Vue.js 在不同领域和项目中的广泛应用。通过其简洁的语法和丰富的功能,Vue.js 提供了一种高效、灵活和可维护的前端开发方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五秒法则

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值