|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261 |
- $(function () {
-
- // 默认搜索引擎记录
- var searchTypeStore = {
- set: function (type) {
- localStorage.setItem('SearchType', type);
- },
- get: function () {
- return localStorage.getItem('SearchType') || 'bing';
- },
- };
-
- var $searchMethods = $('#search_methods');
- var $searchLogo = $('#search_logo');
- var initSearchType = searchTypeStore.get();
- $searchLogo.addClass(initSearchType).data('type', initSearchType);
-
- var search_types = [
- { url: 'https://www.baidu.com/s?wd=', type: 'baidu' },
- { url: 'https://www.sogou.com/web?query=', type: 'sogou' },
- { url: 'https://cn.bing.com/search?q=', type: 'bing' },
- { url: 'https://www.so.com/s?q=', type: 'so' },
- { url: 'https://www.google.com/search?q=', type: 'google' },
- { url: 'http://www.cilimao.cc/search?word=', type: 'cili' },
- { url: 'http://neets.cc/search?key=', type: 'yingyin' },
- { url: 'http://www.panduoduo.net/s/name/', type: 'wangpan' },
- ];
- $searchLogo.on('click', function () {
- $searchMethods.fadeIn(100);
- });
-
- // 搜索引擎切换
- $searchMethods.on('click', 'li', function () {
- var type = $(this).data('type');
- searchTypeStore.set(type);
- $searchLogo.removeClass()
- .data('type', type)
- .addClass(type + ' search-logo');
- $searchMethods.fadeOut(100);
- $('#search_keyword').focus();
- });
- $searchMethods.on('mouseleave', function () {
- $searchMethods.fadeOut(100);
- });
-
- var EVENT_CLEAR_KEYWORD = 'clearKeyword';
- var EVENT_SEARCH = 'search';
- // 关键词搜索输入
- $('#search_keyword').on('keyup', function (event) {
- var keyword = $(this).val();
- if(event.which==13){
- if($('#search_result .active').length>0){
- keyword = $('#search_result .active').eq(0).text();
- }
- openSearch(keyword)
- return;
- }
- // TODO 上下键选择待选答案
- var bl = moveChange(event);
- if(bl){
- keywordChange(keyword);
- }
- }).on('blur', function () {
- // 推荐结果跳转
- $('#search_result').on('click', 'li', function () {
- var word = $(this).text();
- $('#search_keyword').val(word);
- openSearch(word);
- $('#search_result').hide();
- });
- // 解决失焦和点击事件冲突问题
- setTimeout(function() {
- $('#search_result').hide();
- }, 100)
- }).on('focus', function () {
- var keyword = $(this).val();
- keywordChange(keyword);
- });
-
- function moveChange(e){
- var k = e.keyCode || e.which;
- var bl = true;
- switch(k){
- case 38:
- rowMove('top');
- bl = false;
- break;
- case 40:
- rowMove('down');
- bl = false;
- break;
- }
- return bl;
- }
- function rowMove(move){
- var search_result = $('#search_result');
- var hove_li = null;
- search_result.find('.result-item').each(function(){
- if($(this).hasClass('active')){
- hove_li = $(this).index();
- }
- });
- if(move == 'top'){
- if(hove_li==null){
- hove_li = search_result.find('.result-item').length-1;
- }else{
- hove_li--;
- }
- }else if(move == 'down'){
- if(hove_li==null){
- hove_li = 0;
- }else{
- hove_li==search_result.find('.result-item').length-1?(hove_li=0):(hove_li++);
- }
- }
- search_result.find('.active').removeClass('active');
- search_result.find('.result-item').eq(hove_li).addClass('active');
- $('#search_keyword').val(search_result.find('.result-item').eq(hove_li).addClass('active').text());
- }
-
- function keywordChange(keyword) {
- if (keyword === '') {
- $(document).trigger(EVENT_CLEAR_KEYWORD);
- } else {
- $(document).trigger(EVENT_SEARCH, keyword);
- $('#clear_keyword').show();
- }
- }
-
- // 清空输入框
- $('#clear_keyword').on('click', function () {
- $('#search_keyword').val('');
- $('#search_keyword').focus();
- $(document).trigger(EVENT_CLEAR_KEYWORD);
- });
-
-
- // 搜索
- $('#search_submit').on('click', function () {
- var keyword = $('#search_keyword').val();
- var type = getSeachType();
- var baseUrl = search_types.find(function (item) {
- return item.type === type;
- });
- if (baseUrl && keyword) {
- window.open(baseUrl.url + keyword);
- }
- });
-
- $(document).on(EVENT_CLEAR_KEYWORD, function () {
- $('#clear_keyword').hide();
- $('#search_result').hide();
- });
- $(document).on(EVENT_SEARCH, function (e, keyword) {
- getSearchResult(keyword);
- });
-
- // 获取搜索引擎类型
- function getSeachType() {
- return $('#search_logo').data('type');
- }
-
- // google 搜索结果
- function searchResultGoogle(data) {
- var result = data[1];
- result = result.map(function (item) {
- return item[0];
- });
- renderSearchResult(result);
- }
-
- // 百度 搜索结果
- function searchResultBaidu(data) {
- if (data === undefined) {
- return;
- }
- var result = data.s;
- renderSearchResult(result);
- }
-
- // 渲染搜索结果
- function renderSearchResult(array) {
- var $result = $('#search_result');
- $result.empty().hide();
- if (!array || array.length <= 9) {
- return;
- }
- for (var i = 4; i < array.length; i++) {
- var $li = $('<li class=\'result-item\'></li>');
- $li.text(array[i]);
- $result.append($li);
- }
- $result.show();
- }
-
- window.searchResultGoogle = searchResultGoogle;
- window.searchResultBaidu = searchResultBaidu;
-
- var search_suggest = {
- baidu: {
- url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
- data: function (keyword) {
- return {
- wd: keyword,
- cb: 'window.searchResultBaidu',
- };
- },
- },
- google: {
- url: 'https://sp0.baidu.com/5a1Fazu8AA54nxGko9WTAnF6hhy/su',
- data: function (keyword) {
- return {
- wd: keyword,
- cb: 'window.searchResultBaidu',
- };
- },
- },
- google2: {
- url: 'http://suggestqueries.google.com/complete/search',
- data: function (keyword) {
- return {
- q: keyword,
- jsonp: 'window.searchResultGoogle',
- client: 'youtube',
- };
- },
- },
- wangpan: {
- url: 'http://unionsug.baidu.com/su',
- data: function (keyword) {
- return {
- wd: keyword,
- cb: 'window.searchResultBaidu',
- };
- },
- },
- };
-
- function getSearchResult(keyword) {
- var searchType = getSeachType();
- var suggest = search_suggest[searchType];
- if (!suggest) {
- suggest = search_suggest.baidu;
- }
- $.ajax({
- url: suggest.url,
- dataType: 'jsonp',
- data: suggest.data(keyword),
- });
- }
-
- function openSearch(keyword) {
- var type = getSeachType();
- var baseUrl = search_types.find(function (item) {
- return item.type === type;
- });
- if (baseUrl && keyword) {
- window.open(baseUrl.url + keyword, keyword);
- }
- }
- });
|