首页 > 其他分享 >第146篇:响应式动态居中(js+css,vue)

第146篇:响应式动态居中(js+css,vue)

时间:2024-08-31 23:47:28浏览次数:8  
标签:146 居中 style vue container update js window hero

好家伙,

 

1.使用js原生

<div id="container" style="position: relative; width: 100%; height: 100vh;">
    <div id="hero" style="position: relative;"></div>
</div>

<script>
    const hero = document.getElementById('hero');
    const container = document.getElementById('container');

    hero.style.width = '100px';
    hero.style.height = '100px';
    hero.style.background = '#ffcc00';

    window.onload = function () {
        function update() {
            let heroX = hero.clientWidth;
            let heroY = hero.clientHeight;

            let containerX = container.clientWidth;
            let containerY = container.clientHeight;

            hero.style.left = (containerX - heroX) / 2 + 'px';
            hero.style.top = (containerY - heroY) / 2 + 'px';
        }

        update();
        window.addEventListener('resize', update);
    }
</script>
  • window.onload: 当整个页面及其资源(包括图片、脚本、样式等)加载完成时,会执行 onload 内的代码。

  • update 函数:

    • heroXheroY 分别获取 hero 元素的当前宽度和高度。
    • containerXcontainerY 分别获取 container 元素的当前宽度和高度。
    • hero.style.lefthero.style.top 分别设置 hero 的水平和垂直位置,通过计算将其居中。公式 (containerX - heroX) / 2 计算出 hero 左边缘到 container 左边缘的距离,使 hero 水平居中,类似地,(containerY - heroY) / 2 计算出 hero 上边缘到 container 上边缘的距离,使其垂直居中。
  • update();: 初始调用 update 函数,确保页面加载时 hero 元素被正确居中。

  • window.addEventListener('resize', update);: 添加窗口大小变化事件的监听器,每当浏览器窗口尺寸发生变化时,update 函数会被再次调用,重新计算并更新 hero 的位置,确保它始终在 container 中居中。

 

2.vue

在vue中使用计算属性实现

<template>
  <div :style="containerStyle">
    <div ref="content" :style="contentStyle">
      动态居中的内容
    </div>
  </div>
</template>

<script>
export default {
  data() {
    return {
      containerWidth: 0,
      containerHeight: 0,
      contentWidth: 0,
      contentHeight: 0,
    };
  },
  mounted() {
    // 在组件挂载时,获取容器和内容的尺寸
    this.updateDimensions();
    window.addEventListener('resize', this.updateDimensions);
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.updateDimensions);
  },
  computed: {
    containerStyle() {
      return {
        position: 'relative',
        width: '100%',
        height: '100vh',
      };
    },
    contentStyle() {
      return {
        position: 'absolute',
        top: `${(this.containerHeight - this.contentHeight) / 2}px`,
        left: `${(this.containerWidth - this.contentWidth) / 2}px`,
        backgroundColor: 'lightblue',
        padding: '20px',
      };
    },
  },
  methods: {
    updateDimensions() {
      // 更新容器的宽度和高度
      this.containerWidth = this.$el.clientWidth;
      this.containerHeight = this.$el.clientHeight;
      
      // 更新内容的宽度和高度
      const contentEl = this.$refs.content;
      this.contentWidth = contentEl.clientWidth;
      this.contentHeight = contentEl.clientHeight;
    },
  },
};
</script>

<style scoped>
html, body {
  margin: 0;
  padding: 0;
  width: 100%;
  height: 100%;
}
</style>

通过计算属性计算出位置

 

标签:146,居中,style,vue,container,update,js,window,hero
From: https://www.cnblogs.com/FatTiger4399/p/18388406

相关文章

  • vue2项目中使用webworker(一):发送网络请求
    背景有的时候我们需要向后端发送多个网络请求,如果全部在主线程中操作的话页面会变得非常卡顿,我们可以使用webwoker来发送网络请求,一旦服务响应结果,我们再从子线程给主线程发送消息步骤默认情况下vue2是不支持webwoker。安装worker-loadernpmi-Dworker-loadervue.conf......
  • js常见的报错
    1.UncaughtTypeError:Cannotreadproperty''ofundefined 常见的一种是在渲染UI组件时对于状态的初始化操作不当,当你读取一个未定义的对象的属性或调用其方法时,这个错误会在Chrome中出现。2.TypeError:‘undefined’isnotanobject 这是在Safari中读取属性或调......
  • springboot+vue+mybatis计算机毕业设计电影影评的垂直搜索引擎+PPT+论文+讲解+售后
    近年来,科技飞速发展,在经济全球化的背景之下,大数据将进一步提高社会综合发展的效率和速度,大数据技术也会涉及到各个领域,而爬虫实现网站数据可视化在网站数据可视化背景下有着无法忽视的作用。管理信息系统的开发是一个不断优化的过程,随着网络大数据时代的到来,管理信息系统与大......
  • springboot+vue+mybatis计算机毕业设计房屋租赁管理系统+PPT+论文+讲解+售后
    随着社会的不断进步与发展,人们经济水平也不断的提高,于是对各行各业需求也越来越高。特别是从2019年新型冠状病毒爆发以来,利用计算机网络来处理各行业事务这一概念更深入人心,由于工作繁忙以及疫情的原因,房屋租赁也是比较难实施的。如果开发一款房屋租赁管理系统,可以让用户在最......
  • uniapp创建组件与vue官方文档的差异
    uniapp创建组件形式相对于官方文档的形式话要简单一点uniapp创建组件:另外,有一个注意点,如果你项目特别多的情况下,要先展开,选中这个文件夹,然后找到里面具体要运行的页面来运行,不然的话它是有可能启动不了的,因为它不知道你到底要启动那一个具体页面选中整体项目名,......
  • (附论文)基于Springboot和Vue的冷链物流系统(531)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述冷链物流系统管理系统按照操作主体分为管理员和用户。管理员的功能包括收货地址管理、字典管理、公告管理、货物管理、订单分配管理、货物订单管理、快递员管理、留言板管理、网点信息管理、用......
  • (附论文)基于Springboot和Vue的图书管理系统(532)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:Vue2后端框架:Springboot3、项目图片4、演示视频(附论文)基于Springboot和Vue的图书管理......
  • (附论文)基于Springboot和Vue的可信捐赠系统(535)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述可信捐赠系统管理系统按照操作主体分为管理员和用户。管理员的功能包括收货地址管理、购物车管理、字典管理、论坛管理、捐赠管理、新闻信息管理、商品管理、商品收藏管理、商品评价管理、商品......
  • (附论文)基于Springboot和Vue的协同过滤电影推荐系统(536)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述电影推荐系统管理系统按照操作主体分为管理员和用户。管理员的功能包括付费电影管理、付费电影收藏管理、付费电影评价管理、电影购买管理、字典管理、电影论坛管理、电影资讯管理、免费电影管......
  • (附论文)基于Springboot和Vue的健身房管理系统(542)
    获取源码请滑到最底部访问官网项目配套调试视频和相对应的软件安装包1、项目描述具体请看视频演示2、项目开发工具开发工具:Idea或Eclipse数据库:MysqlJar包仓库:Maven前端框架:Vue2后端框架:Springboot3、项目图片4、演示视频(附论文)基于Springboot和Vue的健身房管......