首页 > 其他分享 >采用flex布局,父组件width为百分比,解决子组件canvas画布width自适应问题

采用flex布局,父组件width为百分比,解决子组件canvas画布width自适应问题

时间:2024-05-11 13:41:53浏览次数:16  
标签:flex .__ handlers var width handler context 组件 ele

 

创建EleResize.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 }   引入文件

 在子组件中添加代码即可完美解决问题

 

 

let listener = function () {           myChart.resize();         } EleResize.on(chartDom, listener)

标签:flex,.__,handlers,var,width,handler,context,组件,ele
From: https://www.cnblogs.com/goging/p/18186328

相关文章

  • Prometheus 监控平台组件深度讲解
    Prometheus的重要性和流行度已经无需多言。直入主题,本文对Prometheus监控平台的各个组件做深度讲解,希望能帮助读者更好地理解Prometheus。监控系统的核心逻辑对于一套监控系统而言,核心就是采集数据并存储,然后做告警判定、数据展示分析,这个 专栏文章 详细讲解了这个数据流......
  • 界面组件DevExpress Reporting中文教程 - 标记(可访问)PDF导出增强
    DevExpressReporting是.NETFramework下功能完善的报表平台,它附带了易于使用的VisualStudio报表设计器和丰富的报表控件集,包括数据透视表、图表,因此您可以构建无与伦比、信息清晰的报表。可访问性支持在DevExpress这里仍然是一个高优先级,在v23.2版本生命周期中,我们专注于控制级......
  • 【vue3入门】-【22】 组件attribute透传
    透传Attribute透传Attribute指的是传递给一个组件,却没有被该组件声明为props或emits的attribute或者v-on事件监听器。最常见的列子就是class、style和id。当一个组件以单个元素为根路径渲染时,透传的attribute会自动被添加到根元素上app.vue<template><!--在引用的组件上使......
  • React的高阶组件详解
    接受一个或多个函数作为参数;返回一个新的函数;2使用场景(页面权限,某些页面是必须用户登录成功才能进行进入;如果用户没有登录成功,那么直接跳转到登录页面;)//定义一个高阶组件,用于鉴权的操作functionloginAuth(WrapperCpn){returnprops=>{//从本地存储中获取tok......
  • vue3中vue页面向组件传值(组件的引入)
    1//vue页面的操作2//vue页面中引入组件;组件放入components文件夹中3importpensionfrom"@/components/CarWenShidu/echart.vue";4importpensionshidufrom"@/components/CarWenShidu/echartshidu.vue";56//向组件中传值handleMethod通过datecode......
  • Flutter中向Widget子组件传参数(多个参数)
    以下是传递参数的示例import'package:flutter/material.dart';classInspectListextendsStatefulWidget{constInspectList({super.key});@overrideState<StatefulWidget>createState()=>_InspectListState();}class_InspectListStateexte......
  • Ant Design Blazor Table 组件的 自定义分页样式, 显示全部记录数,ShowTotal
    在AntDesignBlazor中,Table 组件的 ShowTotal 属性是一个泛型属性,它可以是两种类型之一:Func<PaginationTotalContext,string> 或 RenderFragment<PaginationTotalContext>。这个属性用于定义如何显示表格数据的总条数。OneOf<T1,T2> 是一个特殊的类型,它表示这个......
  • 智密腾讯云直播组件--准备开发环境
    在开始接入流程之前,作为开发者,你需要自行准备好所有关于腾讯云和uniapp所需要的信息,并申请相应的服务和应用数据。本文会指导你如何从头开始完成所有腾讯云环境准备的步骤。所需资料我们的服务依赖于腾讯云的云服务,用以为直播间提供商业支持。通过腾讯云的多个服务相互配合......
  • element-ui使用el-date-picker日期组件常见场景
    开始最近一直在使用element-ui中的日期组件。所以想对日期组件常用的做一个简单的总结;1.处理日期组件选择的时候面板联动问题2.限制时间范围解除两个日期面板之间的联动我们发现2个日期面板之间其实是有联动关系的;开始时间面板和结束时间面板始终只能相邻;不能出现开始......
  • react + antd + js 简单Cron组件,支持国际化
    Cron.jsimportReact,{Fragment,useState,useCallback,useRef,useEffect}from'react';import{Select,TimePicker,Input}from'antd';constOption=Select.Option;constmwidth80={minWidth:80,marginRight:10};constwidt......