react 设置浏览器缩放比例

下拉框切换值时,页面内容根据像素比缩放

第一版:

1. 缩放比例代码实现:

export default function GetScreen() {

  const [windowScreen, setWindowScreen] = useState({
    width: window.screen.width,
    height: window.screen.height
  });

  // 加载页面时,从localStorary中获取缩放比例
   const _screen = localStorary.getItem('screen' || '2')

  // 监听
  useEffect(()=> {
      getWindowScreen(_screen);
  }, []);

  // 方法
  const getWindowScreen = (option) => {
    const { width: screenWidth, height: screenHeight } = window.screen
    setWindowScreen({ width: screenWidth, height: screenHeight })
    document.getElementsByTagName('body')[0].style.zoom = String(option / 
      window.devicePixelRatio
    );
    localStorary.setItem('screen', option)
  }

  // 存储下拉框数据
  const options = [
    {label: '100%', value: '1'}, 
    {label: '90%', value: '0.9'},
    {label: '80%', value: '0.8'}
  ];

  return(
    <Select 
      options={options} 
      defaultValue={ _screen || '1'}                 
      onChange{getWindowScreen}
    >
  )
}

2.  window.devicePixelRatio的值为1或者2,优化代码:

export default function GetScreen() {

  // 加载页面时,从localStorary中获取缩放比例
   const _screen = localStorary.getItem('screen' || '1')

  // 监听
  useEffect(()=> {
      getWindowScreen(_screen);
  }, []);

  // 方法
  const getWindowScreen = (option) => {
    // document.getElementsByTagName('body')[0].style.zoom = String(option / 
    //  window.devicePixelRatio);
    // window.devicePixelRatio的值不固定,有可能为1,也有可能为2,所以这里不能除        
    // window.devicePixelRatio
    document.getElementsByTagName('body')[0].style.zoom = String(option);
    localStorary.setItem('screen', option)
  }

  // 存储下拉框数据
  const options = [
    {label: '100%', value: '1'}, 
    {label: '90%', value: '0.9'},
    {label: '80%', value: '0.8'}
  ];

  return(
    <Select 
      options={options} 
      defaultValue={ _screen || '1'}                 
      onChange{getWindowScreen}
    >
  )
}

2.  不用Hooks

export default function GetScreen() {
  // 方法
  const getWindowScreen = (option) => {
    // 设置body元素的缩放比例
    document.getElementsByTagName('body')[0].style.zoom = String(option);

    // 将选中的值存储到localStorary中
    localStorary.setItem('screen', option);
  }

  // 加载页面时,从localStorary中获取缩放比例
  const _screen = localStorary.getItem('screen' || '1');
  document.getElementsByTagName('body')[0].style.zoom = String(_screen);

  // 存储下拉框数据
  const options = [
    {label: '100%', value: '1'}, 
    {label: '90%', value: '0.9'},
    {label: '80%', value: '0.8'}
  ];

  return(
    <Select 
      options={options} 
      defaultValue={ _screen ||  '1'}                 
      onChange{getWindowScreen}
    >
  )
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值