@ -1,5 +1,5 @@
! ( function ( ) {
var scale = 1 , transformY = 0 , selected = true ;
var scale = 1 , transformY = 0 , selected = true , globalScaleRatio = parseFloat ( BI . Cache . getItem ( 'scaleRatio' ) ) || null ;
var html = document . getElementsByTagName ( 'html' ) [ 0 ] ;
var wrapper = document . getElementById ( "wrapper" ) ;
var fixedWrapper = document . createElement ( "div" ) ;
@ -52,8 +52,8 @@
}
// 进行缩放
function transformScale ( ) {
var bounds = getScaleBounds ( ) ;
function transformScale ( ratio ) {
var bounds = getScaleBounds ( ratio ) ;
scale = bounds . scale ;
wrapper . style . width = bounds . width + "px" ;
@ -66,13 +66,11 @@
wrapper . style . overflowY = "auto" ;
html . style . backgroundColor = "#ffffff" ;
document . body . style . overflowX = "hidden";
document . body . style . overflowX = globalScaleRatio ? "auto" : "hidden";
document . body . style . overflowY = "auto" ;
fixedWrapper . style . overflow = "hidden" ;
if ( scale < 1 ) {
fixedWrapper . style . width = bounds . width * scale + "px" ;
fixedWrapper . style . height = bounds . height * scale + "px" ;
}
fixedWrapper . style . width = bounds . width * scale + "px" ;
fixedWrapper . style . height = bounds . height * scale + "px" ;
window . scale = Math . max ( window . devicePixelRatio * scale , 1 ) ;
}
@ -102,7 +100,7 @@
}
// 获取缩放倍数,原模板宽高
function getScaleBounds ( ) {
function getScaleBounds ( ratio ) {
var widgets = BI . designConfigure . widgets ,
layoutRatio = BI . designConfigure . layoutRatio ,
freeLayoutRatio = BI . designConfigure . freeLayoutRatio ,
@ -135,12 +133,27 @@
var templateWidth = ( Math . round ( ( right / ( layoutRatio . x || 1 ) ) || ( freeRight / ( freeLayoutRatio . x || 1 ) ) ) ) + 60 ;
var templateHeight = ( Math . round ( ( bottom / ( layoutRatio . y || 1 ) ) || ( freeBottom / ( freeLayoutRatio . y || 1 ) ) ) ) + 30 ;
var scaleRatio = parseFloat ( ( html . clientWidth / templateWidth ) . toFixed ( 1 ) ) ;
var bHeight = html . clientHeight / scaleRatio ;
var resultWidth = 0 ;
var resultHeight = 0 ;
var bHeight = 0 ;
if ( ratio ) {
scaleRatio = ratio ;
bHeight = html . clientHeight / scaleRatio ;
resultWidth = templateWidth ;
resultHeight = Math . max ( bHeight , templateHeight ) ;
} else {
bHeight = html . clientHeight / scaleRatio ;
resultWidth = html . clientWidth / scaleRatio ;
resultHeight = Math . max ( bHeight , scaleRatio === 1 ? html . clientHeight : templateHeight ) ;
}
return {
scale : scaleRatio ,
width : html . clientWidth / scaleRatio ,
height : Math . max ( bHeight , scaleRatio === 1 ? html . clientHeight : templateHeight )
width : resultWidth ,
height : resultHeight
} ;
}
@ -344,7 +357,7 @@
var selectHandler = BI . debounce ( function ( ) {
selected && prepareEnv ( ) ;
selected ? transformScale ( ) : removeScale ( ) ;
selected ? transformScale ( globalScaleRatio ) : removeScale ( ) ;
! selected && restoreEnv ( ) ;
} , 30 ) ;
@ -382,6 +395,119 @@
selectHandler ( ) ;
}
} ]
} , {
type : 'bi.text_value_combo' ,
text : '自定义缩放比例' ,
width : 120 ,
value : globalScaleRatio ,
items : [
{
text : '自动' ,
value : null ,
lgap : 10 ,
} ,
{
text : '50%' ,
value : 0.5 ,
lgap : 10 ,
} ,
{
text : '60%' ,
value : 0.6 ,
lgap : 10 ,
} ,
{
text : '70%' ,
value : 0.7 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '80%' ,
value : 0.8 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '90%' ,
value : 0.9 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '100%' ,
value : 1.0 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '110%' ,
value : 1.1 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '120%' ,
value : 1.2 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '130%' ,
value : 1.3 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '140%' ,
value : 1.4 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '150%' ,
value : 1.5 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '160%' ,
value : 1.6 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '170%' ,
value : 1.7 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '180%' ,
value : 1.8 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '190%' ,
value : 1.9 ,
lgap : 10 ,
} ,
{
lgap : 10 ,
text : '200%' ,
value : 2.0 ,
lgap : 10 ,
} ,
] ,
listeners : [ {
eventName : "EVENT_CHANGE" ,
action : function ( v ) {
BI . Cache . setItem ( 'scaleRatio' , v ) ;
globalScaleRatio = v ;
selectHandler ( ) ;
}
} ] ,
} ] )
} ) ;
} ( ) ) ;