浏览器窗口缩放后用css的zoom来保持比例(现在推荐transform)

7 篇文章 0 订阅

方法很简单

1.以下代码就能实现zoom的计算通过实际浏览器大小与默认屏幕大小的比例获取

// 高度计算zoom
var percentage, appHeight = 768;//设置默认屏幕大小
percentage = window.innerHeight * 100 / appHeight;
percentage = Math.floor(percentage) / 100;
document.documentElement.style.zoom= percentage;

现在就搞定了,下面说下transform的方案

首先用transform需要transform-origin:0 0;来指定原点0,0为原点位置根据需要设置

// 高度计算zoom
var percentage, appHeight = 768;//设置默认屏幕大小
percentage = window.innerHeight * 100 / appHeight;
percentage = Math.floor(percentage) / 100;
document.getElementById("POSCashRegisterDetaildiv").style.transform=`scale(${percentage>1.4?1.4:percentage})`;

上面实现以浏览器左上为原点缩放,左上的位置不会变

我是通过obj.getBoundingClientRect().width来获取的transform缩放后的盒子的宽高,(不能用document.body.clientWidth,这样获取永远是设置的原始大小)

通过obj.getBoundingClientRect().width来获取要设置了transform缩放后获取才有效,否则获取的值都是0

var w=document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width||document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width
var clientWidths=((document.body.clientWidth-w)/2)
if (clientWidths<0||w==0) {//如果margin值小于o或者获取到的盒子宽高为0则让margin为0,否则左边就会看不见
clientWidths=0
}
document.getElementById("POSCashRegisterDetaildiv").style.margin="10px "+clientWidths+"px";

 

监听屏幕以下是vue的示例和transform缩放,我做了宽高监听:

  1. data中设置默认值(重要)

screenHeight:window.innerHeight,
screenWidth: document.body.clientWidth,

   2.mounted里面监听

const that = this
that.windowOnresizeInnerHeight()
= () => {
return (() => {
window.screenHeight = window.innerHeight
that.screenHeight = window.screenHeight;
that.screenWidth= document.body.clientWidth;
console.log(111)
that.windowOnresizeInnerHeight()
})()

windowOnresizeInnerHeight(){//此方法写在methods里面
    // 高度计算
    var percentage, appHeight = 768;
    percentage = window.innerHeight * 100 / appHeight;
    percentage = Math.floor(percentage) / 100;
    document.documentElement.style.overflow= "hidden";
    
    // 宽度计算
    var percentageWidth, clientWidth = 1024;
    percentageWidth = document.body.clientWidth * 100 / clientWidth;
    percentageWidth = Math.floor(percentageWidth) / 100;
    if (percentage<percentageWidth) {
            document.getElementById("POSCashRegisterDetail").style.display= "block";
            document.getElementById("POSCashRegisterDetaildiv").style.transform=`scale(${percentage>1.4?1.4:percentage})`;
            var w=document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width||document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width
            var clientWidths=((document.body.clientWidth-w)/2)
            if (clientWidths<0||w==0) {
            clientWidths=0
            }
            document.getElementById("POSCashRegisterDetail").style.overflow= "scroll";
            document.getElementById("POSCashRegisterDetaildiv").style.left="0px";
            document.getElementById("POSCashRegisterDetaildiv").style.top="0px";
            document.getElementById("POSCashRegisterDetaildiv").style.margin="10px "+clientWidths+"px";
            }else{
            document.getElementById("POSCashRegisterDetail").style.display= "block";
            document.getElementById("POSCashRegisterDetaildiv").style.transform=`scale(${percentageWidth>1.4?1.4:percentageWidth})`;
            var w=document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width||document.getElementById("POSCashRegisterDetaildiv").getBoundingClientRect().width
            var clientWidths=((document.body.clientWidth-w)/2)
            if (clientWidths<0||w==0) {
            clientWidths=0
            }
            document.getElementById("POSCashRegisterDetail").style.overflow= "scroll";
            document.getElementById("POSCashRegisterDetaildiv").style.left="0px";
            document.getElementById("POSCashRegisterDetaildiv").style.top="0px";
            document.getElementById("POSCashRegisterDetaildiv").style.margin="10px "+clientWidths+"px";
        }
},

 

在vue中直接用window.onresize 监听时灵时不灵,所以用了以下方式监听搞定了,然而我并不知道问题出在哪儿:

const _that=this;
window.addEventListener('resize', function() {
        //要执行的动作
})

这样能解决在vue中监听有些时候监听不到的问题

 

 

 

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在Vue中,禁止缩放浏览器窗口大小有几种方法可以实现。 第一种方法是通过CSS样式来禁止缩放。在HTML文件的`<head>`标签内,可以添加以下CSS样式代码: ```css <style> body { zoom: reset !important; -moz-transform: scale(1) !important; -moz-transform-origin: top left !important; -o-transform: scale(1) !important; -o-transform-origin: top left !important; -webkit-transform: scale(1) !important; -webkit-transform-origin: top left !important; } </style> ``` 上述代码中,`zoom`属性用于禁止缩放,`transform`属性用于重置缩放,并通过`!important`规定样式的优先级。 第二种方法是在Vue组件中使用JavaScript来禁止缩放。在Vue组件的`<script>`标签内,可以添加以下代码: ```javascript mounted() { window.addEventListener('resize', this.handleResize); }, methods: { handleResize() { window.resizeTo(window.innerWidth, window.innerHeight); } }, beforeDestroy() { window.removeEventListener('resize', this.handleResize); } ``` 上述代码中,`mounted`钩子函数用于在组件挂载时添加窗口缩放事件监听器,`handleResize`方法用于重新设置浏览器窗口大小为当前窗口大小。 需要注意的是,以上两种方法可能会因为浏览器的安全策略而被禁用,所以在实际开发过程中,建议综合考虑用户体验和浏览器安全性,并根据实际需求选择合适的方法来禁止缩放浏览器窗口大小。 ### 回答2: 在Vue中禁止缩放浏览器窗口大小需要通过一个简单的CSS样式来实现。首先,我们可以选择在Vue组件的根元素上添加以下样式: ```css <style> html, body { overflow: hidden; } </style> ``` 在上述代码中,我们将根元素的html和body标签的overflow属性都设置为hidden,这将禁止用户对整个窗口进行任何缩放操作。 此外,如果我们只想禁止水平或垂直方向的窗口缩放,可以将overflow-x或overflow-y属性值设置为hidden。例如,如果我们只想禁止水平缩放,可以将样式修改如下: ```css <style> html, body { overflow-x: hidden; } </style> ``` 需要注意的是,以上样式只是在Vue组件中禁止窗口缩放的一种方法。如果我们需要在整个网页中禁止窗口缩放,可以在全局CSS文件或HTML文件中使用相同的样式。 最后,需要提醒的是,虽然可以通过这种方式禁止窗口缩放,但这可能会违反用户体验的原则。因此,在实际应用中,我们应该慎重考虑是否真的需要禁止窗口缩放,并根据具体情况进行权衡。 ### 回答3: 要禁止缩放浏览器窗口大小,可以使用CSS样式和Vue的指令来实现。 首先,在Vue组件的模板中,添加一个元素作为容器来包裹内容,可以使用一个div元素,并给它一个唯一的id标识,例如"app"。 接下来,在Vue组件的样式中,使用CSS样式来设置这个容器的宽度和高度,并将"overflow"属性设置为"hidden",这样就可以阻止浏览器的滚动条出现。可以在Vue组件的style标签中添加如下样式: ``` <style> #app { width: 100%; height: 100%; overflow: hidden; } </style> ``` 最后,使用Vue的指令来动态绑定这个容器的大小,以使其与浏览器窗口大小保持一致。可以在Vue组件的script标签中添加如下代码: ``` <script> export default { mounted() { window.addEventListener('resize', this.handleResize); this.handleResize(); }, methods: { handleResize() { const app = document.getElementById('app'); app.style.width = window.innerWidth + 'px'; app.style.height = window.innerHeight + 'px'; } }, destroyed() { window.removeEventListener('resize', this.handleResize); } } </script> ``` 上述代码中,我们通过监听"resize"事件来调用handleResize方法,并在组件挂载时添加事件监听器。在handleResize方法中,我们获取到容器的DOM元素,并将其宽度和高度设置为浏览器窗口的宽度和高度。同时,在组件销毁时,移除事件监听器。 通过以上方法,我们就可以禁止缩放浏览器窗口大小,并且保持Vue组件与浏览器窗口的大小一致。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值