码迷,mamicode.com
首页 > 其他好文 > 详细

svg整体缩放至指定大小

时间:2020-03-10 14:22:39      阅读:152      评论:0      收藏:0      [点我收藏+]

标签:char   复制   tle   barchart   pre   根据   不能   方便   let   

一、问题

svg画面跑在分辨率低的电脑上,导致不能完全显示。

二、要求

svg要能够根据电脑的屏幕大小自动缩放至适配电脑的尺寸。

三、实现

 1.获取本机窗口高度、宽度

let clientWidth = document.documentElement.clientWidth,
    clientHeight = document.documentElement.clientHeight;

2.获取缩放比例(svg大小设为x,y)

let widthScale = clientWidth / x, heightScale = clientHeight / y;

3.svg整体缩放

svg的特点是:缩放后,元素的中心坐标也会跟着变化缩放,所以元素的位置会偏移。为防止这种偏移,对svg不仅仅要进行scale(缩放),还要进行translate(中心平移)。

测试后发现缩放倍数x与平移坐标y的关系成一次函数:y = 0.5x - 0.5;

于是得出公式:

svg.setAttribute("transform", `
    translate(${ x * (widthScale - 1) / 2}, ${ y * (heightScale - 1) / 2})
    scale(${widthScale}, ${heightScale})
`);

此时,svg图像会铺满电脑屏幕。

 四、功能延展

 有时,svg图像不仅仅是为了适配屏幕,而是可以动态放大缩小; 
 此时,先给定一个原始大小:height,width,方便以此为基准进行缩放
barChart.setAttribute(‘width‘, barChartWidth); 
barChart.setAttribute(‘height‘, barChartHeight);

再给定自由设置svg大小的变量:

let svgW = 60, svgH = 20;

算出缩放比例:

let widthScale = svgW / barChartWidth, heightScale = svgH / barChartHeight;

进行缩放:

技术图片
// 缩放要注意的是
// 1.把新生成的svg中心坐标重新定位到页面左上角
// 2.大小按比例同时缩放
barChart.setAttribute("transform", `
    translate(${ barChartWidth * (widthScale - 1) / 2}, ${ barChartHeight * (heightScale - 1) / 2})
    scale(${widthScale}, ${heightScale})
`);
技术图片

最终效果:

1. 设svgW = 60, svgH = 20; (找得到svg在哪吗?)
技术图片
2. 设svgW = 180, svgH = 60;

技术图片

3. 设svgW = 600, svgH = 200;

技术图片

大功告成~

svg整体缩放至指定大小

标签:char   复制   tle   barchart   pre   根据   不能   方便   let   

原文地址:https://www.cnblogs.com/smedas/p/12455100.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!