美文网首页
vue echarts 图表自适应宽度

vue echarts 图表自适应宽度

作者: 安徒生1997 | 来源:发表于2021-08-20 14:23 被阅读0次

    1.新建一个js文件 esresize.js

    var EleResize = {

      _handleResize: function(e) {

        var ele = e.target || e.srcElement

        var trigger = ele.__resizeTrigger__

        if (trigger) {

          var handlers = trigger.__z_resizeListeners

          if (handlers) {

            var size = handlers.length

            for (var i = 0; i < size; i++) {

              var h = handlers[i]

              var handler = h.handler

              var context = h.context

              handler.apply(context, [e])

            }

          }

        }

      },

      _removeHandler: function(ele, handler, context) {

        var handlers = ele.__z_resizeListeners

        if (handlers) {

          var size = handlers.length

          for (var i = 0; i < size; i++) {

            var h = handlers[i]

            if (h.handler === handler && h.context === context) {

              handlers.splice(i, 1)

              return

            }

          }

        }

      },

      _createResizeTrigger: function(ele) {

        var obj = document.createElement('object')

        obj.setAttribute(

          'style',

          'display: block; position: absolute; top: 0; left: 0; height: 100%; width: 100%; overflow: hidden;opacity: 0; pointer-events: none; z-index: -1;'

        )

        obj.onload = EleResize._handleObjectLoad

        obj.type = 'text/html'

        ele.appendChild(obj)

        obj.data = 'about:blank'

        return obj

      },

      _handleObjectLoad: function() {

        this.contentDocument.defaultView.__resizeTrigger__ = this.__resizeElement__

        this.contentDocument.defaultView.addEventListener(

          'resize',

          EleResize._handleResize

        )

      }

    }

    if (document.attachEvent) {

      // ie9-10

      EleResize.on = function(ele, handler, context) {

        var handlers = ele.__z_resizeListeners

        if (!handlers) {

          handlers = []

          ele.__z_resizeListeners = handlers

          ele.__resizeTrigger__ = ele

          ele.attachEvent('onresize', EleResize._handleResize)

        }

        handlers.push({

          handler: handler,

          context: context

        })

      }

      EleResize.off = function(ele, handler, context) {

        var handlers = ele.__z_resizeListeners

        if (handlers) {

          EleResize._removeHandler(ele, handler, context)

          if (handlers.length === 0) {

            ele.detachEvent('onresize', EleResize._handleResize)

            delete ele.__z_resizeListeners

          }

        }

      }

    } else {

      EleResize.on = function(ele, handler, context) {

        var handlers = ele.__z_resizeListeners

        if (!handlers) {

          handlers = []

          ele.__z_resizeListeners = handlers

          if (getComputedStyle(ele, null).position === 'static') {

            ele.style.position = 'relative'

          }

          var obj = EleResize._createResizeTrigger(ele)

          ele.__resizeTrigger__ = obj

          obj.__resizeElement__ = ele

        }

        handlers.push({

          handler: handler,

          context: context

        })

      }

      EleResize.off = function(ele, handler, context) {

        var handlers = ele.__z_resizeListeners

        if (handlers) {

          EleResize._removeHandler(ele, handler, context)

          if (handlers.length === 0) {

            var trigger = ele.__resizeTrigger__

            if (trigger) {

              trigger.contentDocument.defaultView.removeEventListener(

                'resize',

                EleResize._handleResize

              )

              ele.removeChild(trigger)

              delete ele.__resizeTrigger__

            }

            delete ele.__z_resizeListeners

          }

        }

      }

    }

    export { EleResize }

    2.引入 esresize .js

    import { EleResize } from '../../assets/js/esresize'

    3.使用

    myChart.setOption(option)

          let listener = function () {

           myChart.resize()

          }

          EleResize.on(document.getElementById('myChart'), listener)

    4.注意事项

    <div id="myChart"

             :style="{width: 'calc(100vw - 256px)', height: '450px'}"></div>

    width不能为实际值,若设置为%则会出现f5刷新之后超出屏幕

    相关文章

      网友评论

          本文标题:vue echarts 图表自适应宽度

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