文档的js
/*
主站,子频道,定向站点共用
*/
(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的更多相关文章
- VS Code 中 HTML 文档注释 js 语句异常
今天用 VS Code 编辑 html 文档时,发现快捷键注释 js 代码显示成 “<!-- …… -->”,怀疑是不是因为安装了某个插件,随后排查出系 Jinja 所致,将其禁用之后就 ...
- HTML文档插入JS代码的几种方法
在HTML文档里嵌入客户端JavaScript代码有4中方法: 1.内联,放置在< script>和标签对之间. 2.放置在由< script>标签的src属性指定的外部文件中 ...
- dede修改移动文档的js
dede后台弹框修改: 想做个类似文章列表的移动功能,弹框,然后修改成功到表 先在list.js里复制一份moveArc的方法,到archives_do.php里复制一份moveArchives的方法 ...
- 文档打印 js print调用打印dom内容
1.首先按目前研究 print可以打印dom 2.被设置overflow:hidden 的模块,打印时会被截掉. 3.被设置成 display:none 的dom 打印不会有样式 边框等. 4.如果需 ...
- 前端javascript规范文档 (http://www.xuanfengge.com/category/web)
说明:本文档为前端JS规范 一.规范目的 为提高团队协作效率,便于前端后期优化维护,输出高质量的文档. 二.基本准则 符合web标准,结构表现行为分离,兼容性优良.页面性能方面,代码要求简洁明了有序, ...
- JS--dom对象:document object model文档对象模型
dom对象:document object model文档对象模型 文档:超文本标记文档 html xml 对象:提供了属性和方法 模型:使用属性和方法操作超文本标记性文档 可以使用js里面的DOM提 ...
- asp.net 实现pdf、swf等文档的浏览
一.pdf的浏览 可以借助于pdf.js插件完成,使用pdf.js的好处是不需要安装额外的插件(比如flash),是纯web的解决方案.插件的下载链接:http://mozilla.github.io ...
- JSDoc 3 生成javascript API文档
一.javascript注释规范 我们在编写javascript文件的时候,一般会添加一些注释.例如一些文件.类.方法和属性都应该用合适的标记和类型进行注释.这里不但方便我们的阅读,也能养成一个好的习 ...
- JRoll 2 使用文档(史上最强大的下拉刷新,滚动,无限加载插件)
概述 说明 JRoll,一款能滚起上万条数据,具有滑动加速.回弹.缩放.滚动条.滑动事件等功能,兼容CommonJS/AMD/CMD模块规范,开源,免费的轻量级html5滚动插件. JRoll第二版是 ...
随机推荐
- LPC18xx/43xx SWD/JTAG Debug Connector
- IAR EWARM : Debugging with CMSIS-DAP
- 使用Axure RP原型设计实践07,注册判断
本篇实现注册页的一些功能.本项目是通过用户名和电子邮件进行注册的. 在本篇之前,在"使用Axure RP原型设计实践03,制作一个登录界面的原型"中已经对注册页做了基本的处理. 打 ...
- TStream实现多表提交
TStream实现多表提交 function TynFiredac.SaveDatas(const ATableName, ATableName2: string; ADeltas: TStream; ...
- linux下一个网卡配置多个IP
转自:http://blog.csdn.net/beckdon/article/details/15815197 最常用的给网卡配置ip的命令为 #ifconfig eth0 192.168.0.1 ...
- Unity3D 的大场景内存优化
我们公司的一个 MMORPG 项目最近在内存方面碰到了红线,昨天开会讨论了一下.我提出了一个改进方案,写篇 blog 记录一下. 问题是这样的.在当下的手机及平板硬件设备条件下,操作系统留给应用的可用 ...
- java使用反射强制给private字段赋值
今天项目中遇到了一个问题,要调用一个类,并获取这个类的属性进行赋值然后将这个类传递到方法中做为参数. 实际操作时才发现,这个类中的字段属性是私有的,不能进行赋值!没有提供公有的方法.而这个类又是打包成 ...
- 用开源项目JazzyViewPager实现ViewPager切换动画
JazzyViewPager这个项目可以让viewpager有各种绚丽的动画,而且还可以自由扩展.但从官网下载的lib导入时会出现找不到视图的问题,不知道是不是我人品不行,所以我就自己写了lib.总之 ...
- Button 在布局文件中定义监听器,文字阴影,自定义图片,代码绘制样式,添加音效的方法
1.Button自己在xml文件中绑定监听器 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/andro ...
- 《MATLAB面向对象程序设计》
<MATLAB面向对象程序设计> 基本信息 作者: 苗志宏 马金强 出版社:电子工业出版社 ISBN:9787121233449 上架时间:2014-6-18 出版日期:2014 年 ...