相关疑难解决方法(0)

如何将 ResizeObserver 应用于 SVG-Element?

我喜欢对 HTML 文档中 SVG 元素的大小变化做出反应。经过一番研究,我发现 ResizeObserver API 旨在侦听有关给定 HTML 或 SVG 元素的此类更改(stackoverflowMDN)。不幸的是,我无法让它适用于 SVG 元素。

我的示例包含一个 DIV 元素、一个 SVG 元素以及每个元素的 ResizeObserver:

const svg = document.querySelector('#svg')
const svgInfo = document.querySelector('#svg-info')
const div = document.querySelector('#div')
const divInfo = document.querySelector('#div-info')

const svgObserver = new ResizeObserver(() => {
  svgInfo.textContent = svg.clientWidth
})
svgObserver.observe(svg)
const divObserver = new ResizeObserver(() => {
  divInfo.textContent = div.clientWidth
})
divObserver.observe(div)
Run Code Online (Sandbox Code Playgroud)
<svg id="svg" style="background-color: red; width: 100%; height: 50px"></svg>
<div id="svg-info">initial</div>
<div id="div" style="background-color: blue; width: 100%; …
Run Code Online (Sandbox Code Playgroud)

html javascript svg

5
推荐指数
1
解决办法
1079
查看次数

我可以使用MutationObserver来监听计算样式的变化吗?

我可以使用MutationObserver来监听计算样式的变化吗?我有一个宽度为100%的div,我想知道它的计算宽度何时发生变化,但到目前为止还没有成功.如果我务实地更改样式,MutationObserver会起作用:

document.getElementById("myDiv").style.width = "200px"

但是,如果通过窗口调整大小或父div重新调整大小来调整接口大小,则它不起作用.

任何不涉及超时的解决方案?

更新:我对一个也不会涉及监听窗口调整大小事件的解决方案特别感兴趣,因为有时界面会在没有调整窗口大小的情况下发生变化.例如,具有宽度百分比和父节点大小的div更改.

javascript css dom

3
推荐指数
1
解决办法
3163
查看次数

调整大小事件未在div上触发

看一下这个例子:https : //jsfiddle.net/vxun2Lgg/2/

我在containerdiv 上附加了“调整大小”事件监听器。打开开发工具并修改的宽度后container,不会调用resize回调。我想念什么?

PS:我对窗口调整大小事件不感兴趣,仅对containerdiv 感兴趣。

的HTML:

<div class="container"></div>
Run Code Online (Sandbox Code Playgroud)

js:

var container = document.getElementsByClassName("container")[0];
container.addEventListener("resize",function(){console.log("resizing")});
Run Code Online (Sandbox Code Playgroud)

html javascript css

3
推荐指数
2
解决办法
2410
查看次数

Angular - 避免 setTimeout() hack 来获取 div 宽度

编写了一个 Angular 13 组件,每当窗口大小调整时,它都会在 div 中绘制一些内容。

问题是获取 div 的渲染宽度。如果我不使用 setTimeout() 并延迟 170 毫秒,this.treemap.nativeElement.offsetWidth则为零。

由于树形图必须在每次调整窗口大小时重新渲染,我还尝试从 ngAfterViewInit() 调度窗口调整大小事件,但它似乎也发生得太快(所以再次this.treemap.nativeElement.offsetWidth为零)。

模板的相关部分...

  <div #treemap class="treemap col-12"></div>
Run Code Online (Sandbox Code Playgroud)

和缩写代码...

// Details omitted for brevity
export class TreemapComponent implements AfterViewInit {
  @ViewChild('treemap') treemap!: ElementRef

  @HostListener('window:resize', ['$event'])
  private render() {
    const width = this.treemap.nativeElement.offsetWidth
    // code that successfully renders a treemap in the div as long as width != 0
  }

  callHack(): void {
    setTimeout(() => this.render(), 170) // testing shows 170ms is lowest possible …
Run Code Online (Sandbox Code Playgroud)

dom event-handling dom-events angular angular-lifecycle-hooks

3
推荐指数
1
解决办法
857
查看次数

使用 javascript 检测 div 宽度何时更改

我是 javascript 新手,我想在 div 更改时执行一些操作

在 jquery 中,我使用这段代码

var width = $(window).width();
$(window).resize(function(){
   if($(this).width() != width){
      width = $(this).width();
       console.log(width);
   }
});
Run Code Online (Sandbox Code Playgroud)

但我想使用 javascript 来完成它,请帮助我......

html javascript

1
推荐指数
1
解决办法
9545
查看次数