Fan*_*Fan 1 javascript events resize vue.js
在Vue.js中调整大小时如何立即获取元素的宽度和高度?这是我的代码笔插图,请帮我更改直到工作,谢谢!
let app = new Vue({
el: '#app',
data: {
boxs: [{
width: 100,
height: 100
},
{
width: 100,
height: 100
}
]
}
});Run Code Online (Sandbox Code Playgroud)
#app {
display: flex;
justify-content: center;
align-items: center;
flex-wrap: wrap;
}
.resize {
display: flex;
justify-content: center;
align-items: center;
margin: 5px;
width: 100px;
height: 100px;
overflow: hidden;
resize: both;
background-color: #C3E2CE;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.js"></script>
<div id="app">
<div v-for="box,key in boxs" class="resize">
{{ box.width }} x {{ box.height }}
</div>
</div>Run Code Online (Sandbox Code Playgroud)
要获得响应实际调整大小操作的即时反馈,您可能需要尝试使用MutationObserver. 您可以将其附加到ref组件的某个点并在那里侦听突变。
您可以MutationObserver在mounted函数中附加。一定要在destroyed函数中进行任何你需要的清理。
const Resizable = {
template: "<div ref='main' @resize='onResize' class='resize'>{{dims.width}} | {{dims.height}}</div>",
data() {
return {
dims: {
width: null,
height: null
}
};
},
mounted() {
const {
width,
height
} = this.$refs.main.getBoundingClientRect();
this.dims.width = width;
this.dims.height = height;
const mutationHandler = mutationList => {
for (let mutation of mutationList) {
if (mutation.type === "attributes") {
const {
width,
height
} = mutation.target.getBoundingClientRect();
this.dims.width = width;
this.dims.height = height;
}
}
};
const mo = new MutationObserver(mutationHandler);
mo.observe(this.$refs.main, {
attributes: true,
childList: true,
subtree: true
});
},
methods: {
onResize() {
console.log("Resized");
}
}
};
const app = new Vue({
el: "#app",
components: {
"resizable": Resizable
},
data() {
return {
items: [
"foo",
"bar",
"fizz"
]
}
}
});Run Code Online (Sandbox Code Playgroud)
body {
background-color: #414141;
}
.container {
display: flex;
align-items: center;
justify-content: center;
}
.resize {
resize: both;
margin: 5px;
width: 100px;
height: 100px;
color: black;
overflow: scroll;
background-color: white;
text-align: center;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.4.4/vue.js"></script>
<div id="app">
<div class="container">
<resizable v-for="item in items" :key="item" class="resize"></resizable>
</div>
</div>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13453 次 |
| 最近记录: |