首先讲一下自己对transform scale 的理解,transform scale 放大元素,元素本身的width与height不变,并不会影响页面布局,相当于是在元素上添加了一个放大镜。本质上是放大像素点,所以当放大图片时图片会出现模糊,这里也顺带提一下解决方案,当元素放大时去调用高清图片,不要一开始就加载大图,影响页面加载速度。
使用transform默认的作用中心是元素的中心点,通过 ransform-origin 调整,transform-origin:0 0;
如果有需求不能改变中心点,可以在外层嵌套一层div,放大时同时对div进行transform matrix 偏移操作,在视觉上形成同样的效果。
最后贴上demo代码,放大元素本身不放大,就在外层添加一个div控制它的宽高影响滚动条。
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="js/jquery-1.11.1.min.js" ></script>
<script src="js/bootstrap.min.js"></script>
<link href="css/bootstrap.min.css" rel="stylesheet" />
<style>
#btn{
margin: 200px 200px;
transform-origin:0 0;
}
#zoom-area{
width: 1024px;
height: 800px;
background-color: #2B542C;
position: relative;
padding: 1px;
overflow: scroll;
}
#area{
border: 2px solid #761C19;
}
</style>
</head>
<body>
<div id="zoom-area">
<div id="area">
<div id="btn" style="border:20px solid #000; background-color: #1E9FFF; width: 333px;height: 500px;line-height: 2;">啊你高啊啊阿斯顿</div>
</div></div>
<div id="btn-big">放大</div>
<script>
var zoomTop=0
var zoomLeft=0
var size=1
var w=$('#area').width()
var h=$('#area').height()
$('#btn-big').on('click',function(){
size+=0.5
if(size>1){
//需要把边框的宽度也算上
zoomTop=($('#btn').height()+parseInt($('#btn').css('border-width'))*2)*(size-1)
zoomLeft=($('#btn').width()+parseInt($('#btn').css('border-width'))*2)*(size-1)
$('#area').width(w+zoomLeft)
$('#area').height(h+zoomTop)
}
$('#btn').css({'transform':'scale('+size+','+size+')',
'-ms-transform':'scale('+size+','+size+')',
'-moz-transform':'scale('+size+','+size+')',
'-webkit-transform':'scale('+size+','+size+')'
})
})
</script>
</body>
</html>
如果有更好的解决方案欢迎补充