📄 slidy.js
字号:
function hideToolbar()
{
toolbar.style.display = "none";
toolbar.style.visibility = "hidden";
window.focus();
}
// invoked via F key
function toggleToolbar()
{
if (!viewAll)
{
if (toolbar.style.display == "none")
{
toolbar.style.display = "block";
toolbar.style.visibility = "visible";
wantToolbar = 1;
}
else
{
toolbar.style.display = "none";
toolbar.style.visibility = "hidden";
wantToolbar = 0;
}
}
}
function scrollXOffset()
{
if (window.pageXOffset)
return self.pageXOffset;
if (document.documentElement &&
document.documentElement.scrollLeft)
return document.documentElement.scrollLeft;
if (document.body)
return document.body.scrollLeft;
return 0;
}
function scrollYOffset()
{
if (window.pageYOffset)
return self.pageYOffset;
if (document.documentElement &&
document.documentElement.scrollTop)
return document.documentElement.scrollTop;
if (document.body)
return document.body.scrollTop;
return 0;
}
// looking for a way to determine height of slide content
// the slide itself is set to the height of the window
function optimizeFontSize()
{
var slide = slides[slidenum];
//var dh = documentHeight(); //getDocHeight(document);
var dh = slide.scrollHeight;
var wh = getWindowHeight();
var u = 100 * dh / wh;
alert("window utilization = " + u + "% (doc "
+ dh + " win " + wh + ")");
}
function getDocHeight(doc) // from document object
{
if (!doc)
doc = document;
if (doc && doc.body && doc.body.offsetHeight)
return doc.body.offsetHeight; // ns/gecko syntax
if (doc && doc.body && doc.body.scrollHeight)
return doc.body.scrollHeight;
alert("couldn't determine document height");
}
function getWindowHeight()
{
if ( typeof( window.innerHeight ) == 'number' )
return window.innerHeight; // Non IE browser
if (document.documentElement && document.documentElement.clientHeight)
return document.documentElement.clientHeight; // IE6
if (document.body && document.body.clientHeight)
return document.body.clientHeight; // IE4
}
function documentHeight()
{
var sh, oh;
sh = document.body.scrollHeight;
oh = document.body.offsetHeight;
if (sh && oh)
{
return (sh > oh ? sh : oh);
}
// no idea!
return 0;
}
function smaller() //xuan smaller
{
if (sizeIndex > 0)
{
--sizeIndex;
}
toolbar.style.display = "none";
document.body.style.fontSize = sizes[sizeIndex];
var slide = slides[slidenum];
hideSlide(slide);
showSlide(slide);
setTimeout(showToolbar, 300);
}
function bigger()
{
if (sizeIndex < sizes.length - 1)
{
++sizeIndex;
}
toolbar.style.display = "none";
document.body.style.fontSize = sizes[sizeIndex];
var slide = slides[slidenum];
hideSlide(slide);
showSlide(slide);
setTimeout(showToolbar, 300);
}
// enables cross browser use of relative width/height
// on object elements for use with SVG and Flash media
// with thanks to Ivan Herman for the suggestion
function adjustObjectDimensions(width, height)
{
for( var i = 0; i < objects.length; i++ )
{
var obj = objects[i];
var mimeType = obj.getAttribute("type");
if (mimeType == "image/svg+xml" || mimeType == "application/x-shockwave-flash")
{
if ( !obj.initialWidth )
obj.initialWidth = obj.getAttribute("width");
if ( !obj.initialHeight )
obj.initialHeight = obj.getAttribute("height");
if ( obj.initialWidth && obj.initialWidth.charAt(obj.initialWidth.length-1) == "%" )
{
var w = parseInt(obj.initialWidth.slice(0, obj.initialWidth.length-1));
var newW = width * (w/100.0);
obj.setAttribute("width",newW);
}
if ( obj.initialHeight && obj.initialHeight.charAt(obj.initialHeight.length-1) == "%" )
{
var h = parseInt(obj.initialHeight.slice(0, obj.initialHeight.length-1));
var newH = height * (h/100.0);
obj.setAttribute("height", newH);
}
}
}
}
function cancel(event)
{
if (event)
{
event.cancel = true;
event.returnValue = false;
if (event.preventDefault)
event.preventDefault();
}
return false;
}
// See e.g. http://www.quirksmode.org/js/events/keys.html for keycodes
function keyDown(event)// xuan kuaijijian
{
var key;
if (!event)
var event = window.event;
// kludge around NS/IE differences
if (window.event)
key = window.event.keyCode;
else if (event.which)
key = event.which;
else
return true; // Yikes! unknown browser
// ignore event if key value is zero
// as for alt on Opera and Konqueror
if (!key)
return true;
// check for concurrent control/command/alt key
// but are these only present on mouse events?
if (event.ctrlKey || event.altKey || event.metaKey)
return true;
// dismiss table of contents if visible
if (isShownToc() && key != 9 && key != 16 && key != 38 && key != 40)
{
hideTableOfContents();
if (key == 27 || key == 84 || key == 67)
return cancel(event);
}
if (key == 34) // Page Down
{
nextSlide(false);
return cancel(event);
}
else if (key == 33) // Page Up
{
previousSlide(false);
return cancel(event);
}
else if (key == 32) // space bar
{
nextSlide(true);
return cancel(event);
}
else if (key == 37) // Left arrow
{
previousSlide(!event.shiftKey);
return cancel(event);
}
else if (key == 36) // Home
{
firstSlide();
return cancel(event);
}
else if (key == 35) // End
{
lastSlide();
return cancel(event);
}
else if (key == 39) // Right arrow
{
nextSlide(!event.shiftKey);
return cancel(event);
}
else if (key == 13) // Enter
{
if (outline)
{
if (outline.visible)
fold(outline);
else
unfold(outline);
return cancel(event);
}
}
else if (key == 188) // < for smaller fonts
{
smaller();
return cancel(event);
}
else if (key == 190) // > for larger fonts
{
bigger();
return cancel(event);
}
else if (key == 189 || key == 109) // - for smaller fonts
{
smaller();
return cancel(event);
}
else if (key == 187 || key == 191 || key == 107) // = + for larger fonts
{
bigger();
return cancel(event);
}
else if (key == 83) // S for smaller fonts
{
smaller();
return cancel(event);
}
else if (key == 66) // B for larger fonts
{
bigger();
return cancel(event);
}
else if (key == 90) // Z for last slide
{
lastSlide();
return cancel(event);
}
else if (key == 70) // F for toggle toolbar
{
toggleToolbar();
return cancel(event);
}
else if (key == 65) // A for toggle view single/all slides
{
toggleView();
return cancel(event);
}
else if (key == 75) // toggle action of left click for next page
{
mouseClickEnabled = !mouseClickEnabled;
alert((mouseClickEnabled ? "enabled" : "disabled") + " mouse click advance");
return cancel(event);
}
else if (key == 84 || key == 67) // T or C for table of contents
{
if (toc)
showTableOfContents();//xuan
return cancel(event);
}
else if (key == 72) // H for help
{
window.location = helpPage;
return cancel(event);
}
//else if (key == 93) // Windows menu key
//alert("lastShown is " + lastShown);
//else alert("key code is "+ key);
return true;
}
// make note of length of selected text
// as this evaluates to zero in click event
function mouseButtonUp(e)
{
selectedTextLen = getSelectedText().length;
}
// right mouse button click is reserved for context menus
// it is more reliable to detect rightclick than leftclick
function mouseButtonClick(e)
{
var rightclick = false;
var leftclick = false;
var middleclick = false;
var target;
if (!e)
var e = window.event;
if (e.target)
target = e.target;
else if (e.srcElement)
target = e.srcElement;
// work around Safari bug
if (target.nodeType == 3)
target = target.parentNode;
if (e.which) // all browsers except IE
{
leftclick = (e.which == 1);
middleclick = (e.which == 2);
rightclick = (e.which == 3);
}
else if (e.button)
{
// Konqueror gives 1 for left, 4 for middle
// IE6 gives 0 for left and not 1 as I expected
if (e.button == 4)
middleclick = true;
// all browsers agree on 2 for right button
rightclick = (e.button == 2);
}
else leftclick = true;
// dismiss table of contents
hideTableOfContents();
if (selectedTextLen > 0)
{
stopPropagation(e);
e.cancel = true;
e.returnValue = false;
return false;
}
// check if target is something that probably want's clicks
// e.g. embed, object, input, textarea, select, option
if (mouseClickEnabled && leftclick &&
target.nodeName != "EMBED" &&
target.nodeName != "OBJECT" &&
target.nodeName != "INPUT" &&
target.nodeName != "TEXTAREA" &&
target.nodeName != "SELECT" &&
target.nodeName != "OPTION")
{
nextSlide(true);
stopPropagation(e);
e.cancel = true;
e.returnValue = false;
}
}
function previousSlide(incremental)
{
if (!viewAll)
{
var slide;
if ((incremental || slidenum == 0) && lastShown != null)
{
lastShown = hidePreviousItem(lastShown);
setEosStatus(false);
}
else if (slidenum > 0)
{
slide = slides[slidenum];
hideSlide(slide);
slidenum = slidenum - 1;
slide = slides[slidenum];
setVisibilityAllIncremental("visible");
lastShown = previousIncrementalItem(null);
setEosStatus(true);
showSlide(slide);
}
setLocation();
if (!ns_pos)
refreshToolbar(200);
}
}
function nextSlide(incremental)
{
if (!viewAll)
{
var slide, last = lastShown;
if (incremental || slidenum == slides.length - 1)
lastShown = revealNextItem(lastShown);
if ((!incremental || lastShown == null) && slidenum < slides.length - 1)
{
slide = slides[slidenum];
hideSlide(slide);
slidenum = slidenum + 1;
slide = slides[slidenum];
lastShown = null;
setVisibilityAllIncremental("hidden");
showSlide(slide);
}
else if (!lastShown)
{
if (last && incremental)
lastShown = last;
}
setLocation();
setEosStatus(!nextIncrementalItem(lastShown));
if (!ns_pos)
refreshToolbar(200);
}
}
// to first slide with nothing revealed
// i.e. state at start of presentation
function firstSlide()
{
if (!viewAll)
{
var slide;
if (slidenum != 0)
{
slide = slides[slidenum];
hideSlide(slide);
slidenum = 0;
slide = slides[slidenum];
lastShown = null;
setVisibilityAllIncremental("hidden");
showSlide(slide);
}
setEosStatus(!nextIncrementalItem(lastShown));
setLocation();
}
}
// to last slide with everything revealed
// i.e. state at end of presentation
function lastSlide()
{
if (!viewAll)
{
var slide;
lastShown = null; //revealNextItem(lastShown);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -