mirror of
https://github.com/pdf2htmlEX/pdf2htmlEX.git
synced 2024-07-03 08:38:39 +00:00
zoom by js
This commit is contained in:
parent
dce8fd9949
commit
0774e4a063
|
@ -16,10 +16,20 @@ var pdf2htmlEX = (function(){
|
|||
page_boxes : [],
|
||||
container : null,
|
||||
selective_render_timer : null,
|
||||
default_scale_ratio : 1.0,
|
||||
cur_scale_ratio : 1.0,
|
||||
|
||||
|
||||
|
||||
/* Constants */
|
||||
render_timeout : 200,
|
||||
scale_step : 0.9,
|
||||
|
||||
|
||||
|
||||
init_before_loading_content : function() {
|
||||
/*hide all pages before loading, will reveal only visible ones later */
|
||||
this.hide_pages();
|
||||
this.pre_hide_pages();
|
||||
},
|
||||
|
||||
init_after_loading_content : function() {
|
||||
|
@ -27,16 +37,17 @@ var pdf2htmlEX = (function(){
|
|||
this.page_boxes = $(".b");
|
||||
this.container = $("#pdf-main");
|
||||
|
||||
if(this.pages.length > 0)
|
||||
{
|
||||
this.default_scale_ratio = this.cur_scale_ratio
|
||||
= $(this.pages[0]).height() / $(this.page_boxes[0]).height();
|
||||
}
|
||||
|
||||
this.selective_render();
|
||||
|
||||
var _ = this;
|
||||
this.container.scroll(function(){
|
||||
if(_.selective_render_timer)
|
||||
clearTimeout(_.selective_render_timer);
|
||||
_.selective_render_timer = setTimeout(function () {
|
||||
_.selective_render();
|
||||
}, 200);
|
||||
});
|
||||
this.container.scroll(function(){ _.schedule_render(); });
|
||||
this.zoom_fixer();
|
||||
},
|
||||
|
||||
init : function() {
|
||||
|
@ -48,7 +59,7 @@ var pdf2htmlEX = (function(){
|
|||
return this;
|
||||
},
|
||||
|
||||
hide_pages : function() {
|
||||
pre_hide_pages : function() {
|
||||
/* pages might have not been loaded yet, so add a CSS rule */
|
||||
var s = '.b{display:none;}';
|
||||
var n = document.createElement("style");
|
||||
|
@ -61,6 +72,13 @@ var pdf2htmlEX = (function(){
|
|||
document.getElementsByTagName("head")[0].appendChild(n);
|
||||
},
|
||||
|
||||
hide_pages : function() {
|
||||
for(var i = 0, l = this.page_boxes.length; i < l; ++i)
|
||||
{
|
||||
$(this.page_boxes[i]).hide();
|
||||
}
|
||||
},
|
||||
|
||||
selective_render : function () {
|
||||
/* hide (positional) invisible pages */
|
||||
var l = this.pages.length;
|
||||
|
@ -87,6 +105,77 @@ var pdf2htmlEX = (function(){
|
|||
}
|
||||
},
|
||||
|
||||
schedule_render : function() {
|
||||
if(this.selective_render_timer)
|
||||
clearTimeout(this.selective_render_timer);
|
||||
|
||||
var _ = this;
|
||||
this.selective_render_timer = setTimeout(function () {
|
||||
_.selective_render();
|
||||
}, this.render_timeout);
|
||||
},
|
||||
|
||||
zoom_fixer : function () {
|
||||
/*
|
||||
* When user try to zoom in/out using ctrl + +/- or mouse wheel
|
||||
* handle this and prevent the default behaviours
|
||||
*
|
||||
* Code credit to PDF.js
|
||||
*/
|
||||
var _ = this;
|
||||
// Firefox specific event, so that we can prevent browser from zooming
|
||||
$(window).on('DOMMouseScroll', function(e) {
|
||||
if (e.ctrlKey) {
|
||||
e.preventDefault();
|
||||
_.rescale(Math.pow(_.scale_step, e.detail), true);
|
||||
}
|
||||
});
|
||||
|
||||
$(window).on('keydown', function keydown(e) {
|
||||
if (e.ctrlKey || e.metaKey) {
|
||||
switch (e.keyCode) {
|
||||
case 61: // FF/Mac '='
|
||||
case 107: // FF '+' and '='
|
||||
case 187: // Chrome '+'
|
||||
_.rescale(1.0 / _.scale_step, true);
|
||||
break;
|
||||
case 173: // FF/Mac '-'
|
||||
case 109: // FF '-'
|
||||
case 189: // Chrome '-'
|
||||
_.rescale(_.scale_step, true);
|
||||
break;
|
||||
case 48: // '0'
|
||||
_.rescale(_.default_scale_ratio, false);
|
||||
break;
|
||||
default:
|
||||
return;
|
||||
}
|
||||
}
|
||||
e.preventDefault();
|
||||
});
|
||||
},
|
||||
|
||||
rescale : function (ratio, is_relative) {
|
||||
console.log('RESCALE');
|
||||
|
||||
if(is_relative)
|
||||
ratio *= this.cur_scale_ratio;
|
||||
|
||||
this.cur_scale_ratio = ratio;
|
||||
this.hide_pages();
|
||||
|
||||
for(var i = 0, l = this.page_boxes.length; i < l; ++i)
|
||||
{
|
||||
var p = $(this.pages[i]);
|
||||
var pb = $(this.page_boxes[i]);
|
||||
p.height(pb.height() * ratio);
|
||||
p.width(pb.width() * ratio);
|
||||
pb.css('transform', 'scale('+ratio+')');
|
||||
}
|
||||
|
||||
this.schedule_render();
|
||||
},
|
||||
|
||||
__last_member__ : 'no comma' /*,*/
|
||||
}.init();
|
||||
})();
|
||||
|
|
Loading…
Reference in New Issue
Block a user