文档的js

时间:2022-09-24 12:40:23
 /*
主站,子频道,定向站点共用
*/
(function() { scrollToAnchor(); toggleSearchForm(); scrollTop(); initScrollBar(); // 文档图片放大查看
imgZoom(); renderCodeBox(); dropdownClick(); fixAside(); // 侧边栏固定
function fixAside() {
if (SITE_SLUG === 'open') {
var headerHeight = $('.header').outerHeight() + $('.search-wrapper').outerHeight() + 32;
var offsetTop = $('.dropdown-menu-selector').height() || 0;
affixSidebar(headerHeight, offsetTop);
affix($('.breadcrumb'), headerHeight, 0);
} else {
var headerHeight = $('.header').outerHeight();
var offsetTop = 86;
affixSidebar(headerHeight, offsetTop);
}
} // 页面加载时的锚点定位
function initScrollBar() {
$(window).on('load', function() {
var hash = decodeURIComponent(window.location.hash);
if (!hash) return; // 兼容 toc 旧版本中的链接错误
if (hash.substr(0, 2) === '##') {
hash = hash.substr(1);
} if (hash !== '#' && $(hash).length) {
var top = $(hash).offset().top - $('.breadcrumb').outerHeight(); // 子站点需要计算头部高度
if (SITE_SLUG !== 'open') {
top -= $('.page-title').outerHeight();
}
setTimeout(function() {
$(window).scrollTop(top);
}, 0);
}
});
} function affix($el, headerHeight, offsetTop) {
$(window).on('load scroll resize', function () {
if (!$el.length) return; var scrollTop = window.scrollY || window.pageYOffset;
if (scrollTop > headerHeight) {
$el.css({
position: 'fixed',
top: offsetTop,
left: $el.offset().left,
right: $('body').width() - $el.offset().left - $el.width(),
})
} else {
$el.removeAttr('style')
}
});
} function affixSidebar(headerHeight, offsetTop) {
var footerHeight = $('.body-footer').outerHeight();
var $sidebar = $('.sidebar-wrapper');
var $breadcrumb = $('.breadcrumb'); $(window).on('load scroll resize', function () {
var scrollTop = window.scrollY || window.pageYOffset; // sidebar fixed 时跟底部保持的距离
var offsetBottom = document.body.scrollHeight - scrollTop - window.innerHeight - 32; var bottom = 0;
if (offsetBottom < footerHeight) {
bottom = footerHeight - offsetBottom;
} $sidebar.find('.sidebar').css({
'height': window.innerHeight - bottom - offsetTop,
}); // sidebar fixed
if (scrollTop > headerHeight) {
$sidebar.addClass('fixed');
} else {
$sidebar.removeClass('fixed');
}
});
} function dropdownClick() {
// dropdown trigger: click
$('body').on('click', '.dropdown .dropdown-trigger', function() {
var $dropdown = $(this).parent('.dropdown');
$dropdown.toggleClass('open'); if ($dropdown.hasClass('open') && $dropdown.hasClass('dropdown-menu-selector')) {
var $menu = $('#main-menu');
var $active = $menu.find('.menu-item .active');
if ($active.length) {
var top = $menu.scrollTop() + $active.position().top - 56;
if (top > 0) {
$menu.scrollTop(top);
}
}
}
});
$('html').on('click', function() {
$('.dropdown.open').removeClass('open');
});
$('html').on('click', '.dropdown', function(e) {
e.stopPropagation();
});
} function renderCodeBox() {
// copy code
var $codeBox = $('<div class="code-box" />');
var codeTemplate = '<span class="btn-copy-code">点击复制</span>';
$('code.language-js, code.language-javascript, code.language-jsx').each(function(index, item) {
$(item).parent('pre').wrap($codeBox).before(codeTemplate);
}) var clipboard = new Clipboard('.btn-copy-code', {
text: function(trigger) {
return trigger.nextElementSibling.textContent;
}
}); var clipboardTimer = null;
clipboard.on('success', (e) => {
$(e.trigger).text('复制成功!');
if (clipboardTimer) {
clearTimeout(clipboardTimer);
}
clipboardTimer = setTimeout(() => {
$(e.trigger).text('点击复制');
}, 1500);
});
} function imgZoom() {
var zoomDefaults = {
styles: {
zoomImage: {
cursor : 'zoom-out',
position : 'absolute',
transition : 'transform 300ms',
transform : 'translate3d(0, 0, 0) scale(1)',
transformOrigin : 'center center',
willChange : 'transform, top, left'
},
zoomContainer: {
position : 'fixed',
top : 0,
right : 0,
bottom : 0,
left : 0,
zIndex : 1024,
},
overlay: {
position : 'absolute',
top : 0,
right : 0,
bottom : 0,
left : 0,
backgroundColor : '#FFF',
opacity : 0,
transition : 'opacity 300ms',
},
btn: {
position : 'absolute',
bottom : 12,
right : 12,
padding : '4px 10px',
border : '1px solid #e9e9e9',
borderRadius : 2,
fontSize : 12,
color : '#999',
},
btnHover: {
color : '#666',
},
},
};
var zoomOriginImage = null;
var zoomTimer = null;
// zoom in
$('.markdown').on('click', 'img', function() {
zoomOriginImage = $(this).get(0); var $wrap = $('<div />');
$wrap.css(zoomDefaults.styles.zoomContainer); var $overlay = $('<div class="overlay" />');
$overlay.css(zoomDefaults.styles.overlay); var $img = $(this).clone();
$img.css(getImageStyle(zoomOriginImage, false)); var $btn = $('<a target="_blank" />');
$btn.attr('href', $img.attr('src')).text('查看原图');
$btn.css(zoomDefaults.styles.btn); $btn.hover(function() {
$(this).css(zoomDefaults.styles.btnHover);
}, function() {
$(this).css(zoomDefaults.styles.btn);
}); $wrap.append($overlay).append($img).append($btn);
$('#zoom-img').append($wrap); // transition
$overlay.css({
opacity: 1,
});
$img.css(getImageStyle($img.get(0), true));
}); // zoom out
$('#zoom-img').on('click', function() {
var $zoom = $(this);
$zoom.find('img').css(getImageStyle(zoomOriginImage, false));
$zoom.find('.overlay').css({
opacity: 0
}); if (zoomTimer) {
clearTimeout(zoomTimer);
}
zoomTimer = setTimeout(function() {
$zoom.html('');
zoomOriginImage = null;
}, 150);
}); $(window).on('scroll', function() {
$('#zoom-img').html('');
zoomOriginImage = null;
}); $(window).on('resize', function() {
if ($('#zoom-img img').length) {
$('#zoom-img img').css(getImageStyle(zoomOriginImage, true));
}
}); function getImageStyle(image, isZoom) {
var imageOffset = image.getBoundingClientRect();
var top = imageOffset.top;
var left = imageOffset.left;
var width = image.width;
var height = image.height; var style = {
top: top,
left: left,
width: width,
height: height
}; if (!isZoom) {
return Object.assign({}, zoomDefaults.styles.zoomImage, style);
} // Get the the coords for center of the viewport
var viewportX = window.innerWidth / 2;
var viewportY = window.innerHeight / 2; // Get the coords for center of the original image
var imageCenterX = imageOffset.left + image.width / 2;
var imageCenterY = imageOffset.top + image.height / 2; // Get offset amounts for image coords to be centered on screen
var translateX = viewportX - imageCenterX;
var translateY = viewportY - imageCenterY; // Figure out how much to scale the image so it doesn't overflow the screen
var scale = getScale(width, height); var zoomStyle = {
transform: 'translate3d(' + translateX + 'px, ' + translateY + 'px, 0) scale(' + scale + ')',
} return Object.assign({}, zoomDefaults.styles.zoomImage, style, zoomStyle);
} function getScale(width, height) {
var totalMargin = 40;
var scaleX = window.innerWidth / (width + totalMargin);
var scaleY = window.innerHeight / (height + totalMargin);
return Math.min(scaleX, scaleY);
}
} function scrollTop() {
// scroll top
$(window).on('load scroll', function() {
if ($(window).scrollTop() > 400) {
$('#scroll-top').addClass('visible');
} else {
$('#scroll-top').removeClass('visible');
}
})
$('#scroll-top').on('click', function(e) {
e.preventDefault();
$('html, body').animate({
scrollTop: 0
}, 150);
})
} function scrollToAnchor(offsetTop) {
// anchor click scroll to element
var breadcrumbHeight = $('.breadcrumb').outerHeight();
var offsetTop = 0;
if (SITE_SLUG === 'open') {
offsetTop = breadcrumbHeight;
} else {
offsetTop = $('.page-title').outerHeight() + breadcrumbHeight;
} // 锚点处理
$('.markdown').on('click', 'a', function(e) {
var href = $(this).attr('href');
if (/^#/.test(href)) {
e.preventDefault();
if ($(href).length) {
var top = $(href).offset().top - offsetTop;
$('html, body').scrollTop(top);
}
}
});
} function toggleSearchForm() {
// header search
$('.header').on('click', '.btn-search', function(e) {
e.preventDefault();
$('.header .user-menu').addClass('search-open');
$('.header .search-form input').focus();
})
$('html').on('click', function(e) {
$('.header .user-menu.search-open').removeClass('search-open');
})
$('html').on('click', '.header .search-form', function(e) {
e.stopPropagation();
})
}
}());

文档的js的更多相关文章

  1. VS Code 中 HTML 文档注释 js 语句异常

    今天用 VS Code 编辑 html 文档时,发现快捷键注释 js 代码显示成 “<!--  …… -->”,怀疑是不是因为安装了某个插件,随后排查出系 Jinja 所致,将其禁用之后就 ...

  2. HTML文档插入JS代码的几种方法

    在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间. 2.放置在由< script>标签的src属性指定的外部文件中 ...

  3. dede修改移动文档的js

    dede后台弹框修改: 想做个类似文章列表的移动功能,弹框,然后修改成功到表 先在list.js里复制一份moveArc的方法,到archives_do.php里复制一份moveArchives的方法 ...

  4. 文档打印 js print调用打印dom内容

    1.首先按目前研究 print可以打印dom 2.被设置overflow:hidden 的模块,打印时会被截掉. 3.被设置成 display:none 的dom 打印不会有样式 边框等. 4.如果需 ...

  5. 前端javascript规范文档 (http&colon;&sol;&sol;www&period;xuanfengge&period;com&sol;category&sol;web)

    说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...

  6. JS--dom对象:document object model文档对象模型

    dom对象:document object model文档对象模型 文档:超文本标记文档 html xml 对象:提供了属性和方法 模型:使用属性和方法操作超文本标记性文档 可以使用js里面的DOM提 ...

  7. asp&period;net 实现pdf、swf等文档的浏览

    一.pdf的浏览 可以借助于pdf.js插件完成,使用pdf.js的好处是不需要安装额外的插件(比如flash),是纯web的解决方案.插件的下载链接:http://mozilla.github.io ...

  8. JSDoc 3 生成javascript API文档

    一.javascript注释规范 我们在编写javascript文件的时候,一般会添加一些注释.例如一些文件.类.方法和属性都应该用合适的标记和类型进行注释.这里不但方便我们的阅读,也能养成一个好的习 ...

  9. JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)

    概述 说明 JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. JRoll第二版是 ...

随机推荐

  1. 0816 1459 json &amp&semi; pickle ,目录导入,目录规范

    ---恢复内容开始--- 1.json & pickle 磁盘上只能存储字符串或二进制数据,直接存字典.列表.元组等是存不了的,所以需要把各种数据转换成字符串格式,然后再存到硬盘. 直接将一个 ...

  2. arcgis离海距离的计算

    1.利用arctoolbox——要素——面转线工具,将县界提取出来. 2.对线要素编辑,利用“分割”工具对边界截断,而后融合成一条海岸线 3.利用分析工具——领域分析——近邻分析计算点到海岸线要素的距 ...

  3. js奇葩错误 字符串传递问题

    第一种方式function hello(){    var name="he";    var content="<input type=button value= ...

  4. 翻译:MLAPP(2&period;1节)

    笔者:尝试翻译MLAPP(Machine Learning: a Probabilistic Perspective)一书,供机器学习的学者参考,如有错误理解之处请指出,不胜感激!(如需转载,请联系本 ...

  5. 【Topcoder 10689】TheSoccerDivOne

    题意:给\(n\)个队伍的积分,它们要踢足球,每个队伍剩下4场没有踢. 问踢完后\(0\)队伍最高排名. 思路:首先想了贪心,可惜不对. 那么老实dp. 首先:每个队伍具体和哪个人踢了没有关系. 那么 ...

  6. 重置密码解决MySQL for Linux错误 ERROR 1045 &lpar;28000&rpar;&colon; Access denied for user &&num;39&semi;root&&num;39&semi;&commat;&&num;39&semi;localhost&&num;39&semi; &lpar;using password&colon; YES&rpar;

    出现报错: Warning: World-writable config file '/etc/my.cnf' is ignored // 该文件权限过高ERROR 1045 (28000): Acc ...

  7. 解决IE8下opacity属性失效问题,无法隐藏元素

    解决IE8下opacity属性失效问题   由于opacity属性存在兼容性问题,所以在IE8下,用opacity来设置元素的透明度,会失效,从而导致页面的样式问题.在IE8及其更早的浏览器下,我们可 ...

  8. Docker 简介,入门

    1.简介 Docker 使用 Google 公司推出的 Go 语言 进行开发实现,基于 Linux 内核的 cgroup,namespace,以及 AUFS 类的 Union FS 等技术,对进程进行 ...

  9. python数据结构详解

    Python中常见的数据结构可以统称为容器(container).序列(如列表和元组).映射(如字典)以及集合(set)是三类主要的容器. 一.序列(列表.元组和字符串) 序列中的每个元素都有自己的编 ...

  10. JAXB简单样例

    参考网页:http://www.mkyong.com/java/jaxb-hello-world-example/JAXB完整教程:https://jaxb.java.net/tutorial/1.J ...