美文网首页前端经验分享让前端飞
使用表驱动编程优化代码

使用表驱动编程优化代码

作者: Adoins | 来源:发表于2019-04-01 16:08 被阅读1次

最近造轮子,在写 popover 组件时写出了一段很臃肿的代码,有许多 if,else,如下

      positionContent () {
        const {contentWrapper, triggerWrapper} = this.$refs
        document.body.appendChild(contentWrapper)
        let {width, height, top, left} = triggerWrapper.getBoundingClientRect()
        let {height: height2} = contentWrapper.getBoundingClientRect()
        if (this.position === 'top') {
          contentWrapper.style.left = left + window.scrollX + 'px'
          contentWrapper.style.top = top + window.scrollY + 'px'
        } else if (this.position === 'bottom') {
          contentWrapper.style.left = left + window.scrollX + 'px'
          contentWrapper.style.top = top + height + window.scrollY + 'px'
        } else if (this.position === 'left') {
          contentWrapper.style.left = left + window.scrollX + 'px'
          contentWrapper.style.top = top + window.scrollY +
            (height - height2) / 2 + 'px'
        } else if (this.position === 'right') {
          contentWrapper.style.left = left + window.scrollX + width + 'px'
          contentWrapper.style.top = top + window.scrollY +
            (height - height2) / 2 + 'px'
        }
      }

以上是不是有很多重复的元素,可以用一张表来表示

top bottom left right
top value value value value
left value value value value

参考《代码大全》第十八章可使用表驱动编程来优化。

      positionContent () {
        const {contentWrapper, triggerWrapper} = this.$refs
        document.body.appendChild(contentWrapper)
        let {width, height, top, left} = triggerWrapper.getBoundingClientRect()
        let {height: height2} = contentWrapper.getBoundingClientRect()
        let positions = {
          top: {
            left: left + window.scrollX,
            top: top + window.scrollY
          },
          bottom: {
            left: left + window.scrollX,
            top: top + height + window.scrollY
          },
          left: {
            left: left + window.scrollX,
            top: top + window.scrollY + (height - height2) / 2
          },
          right: {
            left: left + window.scrollX + width ,
            top: top + window.scrollY + (height - height2) / 2
          }
        }
        contentWrapper.style.left = positions[this.position].left + 'px'
        contentWrapper.style.top = positions[this.position].top + 'px'
      }

这是本人的造轮子项目,欢迎来提 issue 和 star https://github.com/zyqq/wheel

相关文章

  • 使用表驱动编程优化代码

    最近造轮子,在写 popover 组件时写出了一段很臃肿的代码,有许多 if,else,如下 以上是不是有很多重复...

  • 如何优化代码中大量的if/else,switch/case?

    如何优化代码中大量的if/else,switch/case?1、使用枚举2、善用Optional3、表驱动法4、提...

  • 表驱动法在iOS中的应用

    表驱动法(Table-Driven Methods)出自《代码大全》。它是一种编程模式——从表里面查找信息而不使用...

  • 【hihoCoder 1534】Array Partition

    Array Partition(题目链接) 思路 使用前缀和优化 使用hash表(map)优化 代码

  • iOS表驱动法去除if-else简化逻辑

    今天介绍用表驱动法优化代码中的逻辑 去除复杂繁多的if-else判断 WMZStrategy(demo) 所谓表...

  • SQL进阶教程之1.12 sql编程方法

    本节主要介绍了统一的编程标准,以优化代码,增加可读性。 表的设计 列、表、索引绝对不要使用如A/AA/a123这样...

  • MySQL 优化

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • MySQL 优化点

    MySQL 优化 表关联查询时务必遵循小表驱动大表原则; 使用查询语句where条件时,不允许出现函数,否则索引会...

  • 表驱动编程

    上面的代码结构大体相同,这时候我们就可以画个表格,一一对应了 我们可以通过一个对象构造这种表格的关系 上面的这种利...

  • 表驱动编程

    在做项目的时候,我总是会因为if else层层套而感觉很烦,所以我就去看了一点书,想办法解决代码千层饼的问题,最后...

网友评论

    本文标题:使用表驱动编程优化代码

    本文链接:https://www.haomeiwen.com/subject/sevvbqtx.html