jQuery(function () { var $ = jQuery; var $_body = $('body'); $('.layout-search-form') // 搜索输入框 获取焦点 和 失去焦点事件 .find('input') .focus(function () { $_body.addClass('searching--focus'); }) .blur(function () { // 加定时器关闭遮罩,防止 点击清除按钮时 出现闪动 var leaveSearchingId = setTimeout(function () { $_body.removeClass('searching--focus'); }, 50); $_body.data('leaveSearchingId', leaveSearchingId); }) .end() // 点击搜索图标,提交表单 .find('.layout-search-icon--search') .mousedown(function () { $(this).parent().submit(); }) .end() // 搜索框旁的 清除按钮 事件 .find('.layout-search-icon--clear') .mousedown(function () { var $_input = $(this).prev(); // 当输入框无值时,不阻止关闭遮罩 if (!$_input.val()) { return; } // 当输入框有值时,清空输入框,并阻止关闭遮罩 $_input.val('').focus(); // 清除关闭遮罩的定时器 clearTimeout($_body.data('leaveSearchingId')); return false; }); //#region 列表页ajax分页 if ($('.layout-wrap-list, .layout-wrap-result').length && $('.next.page-numbers').length) { var infScroll = new InfiniteScroll( '#main', { // Set to selector string to use the href of the next page's link path: '.next.page-numbers', // or set with function // path: function() { // return return '/articles/P' + ( ( this.loadCount + 1 ) * 10 ); // } append: '.post.layout-card, .hitsory-record-month', history: 'false', responseType: 'document', hideNav: '.navigation.pagination', checkLastPage: true, scrollThreshold: 400, elementScroll: false, // Loads next page when scroll crosses over scrollThreshold loadOnScroll: true, onInit: undefined, debug: false, status: '.scroller-status', // Displays status elements indicating state of page loading: // .infinite-scroll-request, .infinite-scroll-load, .infinite-scroll-error // status: '.page-load-status' }); // 在历史新闻列表,由于分页会造成重复的 月份分割标记,所以在这里去重 if ($('.layout-wrap-history').length) { // 该事件 在元素被添加到主页面后 触发 infScroll.on('append', function(response, path, items) { var RECORD_MONTH_CLASSNAME = 'hitsory-record-month'; var $_firstAppendRecordMonth = $(items).filter('.' + RECORD_MONTH_CLASSNAME).first(); var $_lastExistRecordMonth = $_firstAppendRecordMonth.prevAll('.' + RECORD_MONTH_CLASSNAME).last(); if ($_firstAppendRecordMonth.html() == $_lastExistRecordMonth.html()) { $_firstAppendRecordMonth.hide(); // console.log($_firstAppendRecord); } }); } } //#endregion //#region 文章内容页事件 // 绑定二维码展示事件 if (window.QRCode) { var $_qrcodePopup = $('#qrcodePopup'); var $_qrcodeBody = $_qrcodePopup.find('.qrcode-body'); $_qrcodePopup.appendTo('body'); // 使用QRCode生成指定文本的二维码 var createQRCode = function (text, defaultText) { var correctLevelTryArray = [ 'H', 'Q', 'M', 'L' ]; var correctLevelIndex = 0; while (1) { try { // 生成二维码(为防止重复生成二维码图片,需要先清空容器) new QRCode($_qrcodeBody.empty()[0], { text: text, width: '300', height: '300', correctLevel : QRCode.CorrectLevel[correctLevelTryArray[correctLevelIndex]] }); // 成功生成二维码,则跳出循环 break; // 捕获异常则降低二维码容错等级 继续尝试生成二维码 } catch (error) { correctLevelIndex++; // 如果最低荣错等级都无法生成二维码,则 以默认文本来生成二维码 if (!correctLevelTryArray[correctLevelIndex]) { return createQRCode(defaultText); } } } } $('.share-item-wx').click(function () { // 如果location.href二维码过长生成失败,则使用 站点根路径来生成 createQRCode(location.href, location.origin); $_qrcodePopup.fadeIn(); }); $_qrcodePopup.children('.layout-qrcode-closeable').click(function () { $_qrcodePopup.fadeOut(); }); } // 绑定复制文本事件 if (window.ClipboardJS) { var $_copyText = $('.copy-text, .copy-text-m'); // 若浏览器支持(IE9+) ClipboardJS ,则使用它来复制 if (window.ClipboardJS.isSupported()) { $_copyText.each(function (i, item) { var clipboard = new ClipboardJS(item); clipboard.on('success', function(e) { e.clearSelection(); $(item).addClass('copy-text--success'); setTimeout(function () { $(item).removeClass('copy-text--success'); }, 2000); }); }); } // 若某些浏览器不支持,则改为 ZeroClipboard 的方式 else if (window.ZeroClipboard) { $_copyText.each(function (i, item) { var client = new ZeroClipboard(item); client.on('ready', function(readyEvent) { client.on('aftercopy', function(event) { $(item).addClass('copy-text--success'); setTimeout(function () { $(item).removeClass('copy-text--success'); }, 2000); }); }); }); } else { $_copyText.click(function () { alert('您的浏览器暂不支持复制功能,请使用系统自带的复制功能复制以下文本:\n' + $(this).data('clipboard-text')); }); } } // 分享微博按钮事件 $('.share-item-wb').click(function () { var $_self = $(this); var shareContent = $_self.data('share_content'); var postPicUrl = $_self.data('share_pic_url') || $_self.parents('#main').find('img').attr('src'); var fromUrl = location.href; // 使用新的分享接口 window.open([ 'http://service.weibo.com/share/share.php?', $.param({ url: fromUrl, title: shareContent, pic: postPicUrl }) ].join(''), 'wbshare'); }); //#endregion //#region 历史新闻页面筛选效果 及 搜索结果页面筛选效果 var $_resultContainer = $('.layout-wrap-result'); if ($_resultContainer.length) { // 历史新闻页面 需要额外处理菜单高亮 if ($_resultContainer.hasClass('layout-wrap-history')) { // 菜单高亮处理 $('.layout-menu-list').find('.menu-item').each(function () { if ($(this).children('a').attr('href').match(/history\/?$/)) { $(this).addClass('current-menu-item'); } else { $(this).removeClass('current-menu-item'); } }) .end() // 历史新闻页面,需要移除 layout-menu-home-item 样式 .find('.layout-menu-home-item').removeClass('layout-menu-home-item'); } // 搜索页面需要去掉全部高亮菜单 else if ($_resultContainer.hasClass('layout-wrap-search')) { $('.layout-menu-list').find('.menu-item').removeClass('current-menu-item layout-menu-home-item'); } //#region 历史新闻 和 搜索结果的通用处理 $_searchType = $_resultContainer.find('.layout-search-type-name'); // 先去掉的默认浏览器行为 $_resultContainer.find('.layout-search-bar').find('a').click(function (e) { e.preventDefault(); }); // 重置按钮 $("#searchBarReset").click(function () { $_searchType.each(function () { $(this) .text($(this).data('name')) .data('query_value', ''); }); searchByCondition('reset'); }); // 筛选下拉项点击事件 $_resultContainer.find('.layout-search-type').find('.layout-search-condition a').click(function () { var $_self = $(this); $_self.parents('.layout-search-condition') .prev('a') .text($_self.text()) .data('query_value', $_self.data('query_value')); searchByCondition(); }); // 根据条件 发出搜索请求(组合成查询字符串) function searchByCondition(isReset) { var searchAction = $_resultContainer.children('.layout-search-bar').data('search_action'); var searchPath = ''; // 保证 $_searchType 内的元素顺序为 分类、年份、月份 $_searchType.each(function () { var queryValue = $(this).data('query_value'); if (queryValue) { searchPath += ('/' + queryValue); } }); location.href = searchAction + searchPath + (isReset ? '' : location.search); } //#endregion } //#endregion // 为容器里的 被裁剪图片 添加裁剪方式判断优化 function optimizeClipImg(container) { // 优化裁剪方式 var optimizeClipWay = function ($_img) { // 若裁剪后宽度不够,则改为 v-cut 方式 if ($_img.width() < $_img.parent().width()) { $_img.removeClass('h-cut').addClass('v-cut'); } // 若裁剪后高度不够,则改为 h-cut 方式 else if ($_img.height() < $_img.parent().height()) { $_img.removeClass('v-cut').addClass('h-cut'); } }; // 优化执行时机 $(container).find('.clip-img-container img').each(function () { // 已加载的图片直接优化 if (this.complete) { optimizeClipWay($(this)); } // 为加载完成的图片 则绑定加载事件 else { $(this).on('load', function () { optimizeClipWay($(this)); }); } }); } // 默认会处理主内容区的图片 optimizeClipImg($("#main")); // 移动端的额外处理 if (document.documentElement.clientWidth < 1001) { // 移动搜索栏位置 // 筛选界面事件 $filterPopup = $('.layout-filter-popup-m'); if ($filterPopup.length) { // 去掉筛选选项的阴影效果 $filterPopup.find('.layout-search-condition').removeClass('shadow-effect'); // 筛选栏按钮点击事件 $('.layout-filter-bar-m') // 弹出筛选界面 .find('.filter-button') .click(function () { $filterPopup.addClass('layout-filter-popup-on'); // // 筛选界面默认展开第一个筛选选项 // $firstSearchType = $filterPopup.find('.layout-search-type').first(); // if (!$firstSearchType.hasClass('layout-search-type--expand')) { // $firstSearchType.find('.layout-search-type-name').trigger('click'); // } // 筛选界面默认收起所有筛选选项 $filterPopup.find('.layout-search-type--expand .layout-search-type-name').trigger('click'); }) .end() // 重置按钮 .find('.filter-reset') .click(function () { $("#searchBarReset").trigger('click'); }); // 关闭筛选界面 $filterPopup.find('.layout-filter-popup-closeable').click(function () { $filterPopup.removeClass('layout-filter-popup-on'); }); // 筛选选项折叠 $filterPopup.find('.layout-search-type-name').click(function () { $(this).parent() .toggleClass('layout-search-type--expand') .siblings().removeClass('layout-search-type--expand'); // 由于 transition 无法对 auto型的height起作用,所以这里用JS控制动画 $(this).next().slideToggle() .parent().siblings().find('.layout-search-condition').slideUp(); }); } } // PC端的额外处理 else { // 调整内容页图片放大后的间距数值(避免覆盖文字) if ($_body.hasClass('single-post')) { $_body.find('article.post').find('img:not(.not-scale, .original-size)').each(function () { var $_img = $(this); // scale 之后的图片大小是视觉上的,而 height() 计算的是 scale前的大小 var extraScaleHeight = $_img.height() * 0.18; $_img.css('margin', extraScaleHeight / 2 + 'px' + ' 0'); }); } } });