文档的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第二版是 ...
随机推荐
- 使用GIT进行源码管理——GIT托管服务2018
我曾经介绍过几个在线的GIT托管服务,然而时过境迁,发生了不少变化,便写了此文章,在新的一年重新更新一下: 国外托管网站: 国外托管网站比起国内的来相对靠谱点,但一个主要缺点是网速较慢,并且可能在 ...
- RC4加密算法的原理及实现
RC4于1987年提出,和DES算法一样.是一种对称加密算法,也就是说使用的密钥为单钥(或称为私钥). 但不同于DES的是.RC4不是对明文进行分组处理,而是字节流的方式依次加密明文中的每个字节.解密 ...
- Android论坛
APKBUS:http://www.apkbus.com/forum.php 看雪ANDROID:http://bbs.pediy.com http://www.52pojie.cn http://w ...
- drp错误集锦---“Cannot return from outside a function or method”
好久都不动的项目,今天打开项目突然是红色感叹号.详细错误表现为: 也就是说,如今MyEclipse已经不识别在JSP页面中使用的return方法了(并且不止一处这种警告),那怎么办?????顿时闹钟一 ...
- Yarn中ResourceManager的RPC协议
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemNjXzAwMTU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- NSDictionary 详解
1.使用dictionaryWithObjectsAndKeys方法存储数据时,中间任何一个对象都不能为nil,否则它后面都对象都无法存入aFiledic.因为dictionaryWithObject ...
- [CALayer release]: message sent to deallocated instance
遇到此问题时,查看以下类的dealloc方法中是否有过度释放. 可以在release前先判断以下对象是否还存在. -(void)dealloc { if (!m_tableView) [m_table ...
- ibatis.net:惯用法
使用<![CDATA[]]>保持SQL格式 IN 查询
- Module ngx_http_v2_module
官方配置说明: http://nginx.org/en/docs/http/ngx_http_v2_module.html#example ngx_http_v2_module模块指令中文说明 ngx ...
- CircleImageManager——圆形 / 圆角图片的工具类
这个类可以实现圆角,或者是圆形图片的操作. CircleImageManager.java package com.kale.utils; import android.content.Context ...