您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
make it easier to read books!
// ==UserScript== // @name DLBOOKS BETTER // @namespace https://greasyfork.org/ja/scripts/40309-dlbooks-better // @version 1.05 // @description make it easier to read books! // @author badfalcon // @match http://dlbooks.to/detail/* // @grant GM_setValue // @grant GM_getValue /* load jQuery */ // @require https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js // ==/UserScript== (function() { 'use strict'; var fullscreen = true; var slideshow = false; var expandSidemenu = false; /* function getSettings(){ fullscreen = GM_getValue('fullscreen',true); GM_setValue('fullscreen',false); console.log(fullscreen); } getSettings(); */ var loading = false; var totalPages = parseInt($('#page_num').text().match(/\((.+)\/(.+)\)/i)[2]); var currentPage = 1; var loadedPages = 0; var finishedPages = 0; var preloadNum = 100; var intervalTime = 100; // millisec var slideshowInterval = 3000; // millisec var interval = false; var timer; var imageWidth = 0; var imageHeight = 0; var imageRatio = 0; var windowWidth = 0; var windowHeight = 0; var windowRatio = 0; timer = false; var debug = false; if(!debug){ preload(); } $('.movie-in-ad').remove(); var modalWindow = $('<div>').attr('id','modalWindow') .css({'position':'fixed', 'z-index':'100', 'background-color':'rgba(0,0,0,0.8)', 'width':'100%', 'height':'100%', }); var mainBlock = $('<div>').attr('id','mainBlock') .css({'display':'flex', 'justify-content': 'center', 'width':'100%', 'height':'100%', }); var statusBar = $('<div>').attr('id','statusBar') .css({'color':'white', 'position':'fixed', 'z-index':'100', 'background-color':'rgba(0,0,0,0.6)', // 'top':'0', // 'left':windowWidth/2, 'padding':'5px', 'border-radius':'0px 0px 5px 5px', '-webkit-border-radius':'0px 0px 5px 5px', '-moz-border-radius':'0px 0px 5px 5px', 'display':'flex', 'flex-direction':'column', }); var statusPopup = $('<div>').attr('id','statusPopup') .css({'color':'white', }); var statusTimeoutID = null; function showStatus(str,timer){ // statusBar.css('left',(windowWidth-statusPopup.width())/2); statusPopup.text(str).slideDown("fast",function(){ // statusBar.css('left',(windowWidth-statusBar.width())/2); if(statusTimeoutID !== null){ clearTimeout(statusTimeoutID); } if(timer){ statusTimeoutID = setTimeout(function(){ statusPopup.slideUp('normal',function(){ // statusBar.css('left',(windowWidth-statusBar.width())/2); }); },2000); }else{ } }); } function hideOverlay(){ fullscreen = false; if(slideshow){slideshowButton.click();} modalWindow.hide(); } function showOverlay(){ fullscreen = true; modalWindow.show(); } var openButton = $('<button>').text('fullscreen'); openButton.on('click',function(){ showOverlay(); }); $('#one_col > h2:nth-child(1) > span').after(openButton); var sideMenu = $('<div>').css({ "display":"flex", "flex-direction":"row", "position":"fixed", }); var sideList = $('<div>').css({ "display":"flex", "flex-direction":"column", "width":"80px", "height":"100%", "background-color":"rgba(0,0,0,0.5)", }); var toggleButton = $('<button>').text('>'); toggleButton.on('click',function(){ if (sideList.is(':visible')) { // 表示されている場合の処理 sideList.hide(); $(this).text('>'); expandSidemenu = false; } else { // 非表示の場合の処理 sideList.show(); $(this).text('<'); expandSidemenu = true; } }); var status = $('<div>').attr('class','statusText').html('C('+currentPage+'/'+totalPages+')<br>L('+loadedPages+ '/' + totalPages + ')').css('color','white'); function updateStatus(){ var slideshowStatus = slideshow ? 'playing ' : ''; status.html(slideshowStatus + 'C('+currentPage+'/'+loadedPages+':'+totalPages+')'); } var reloadButton = $('<button>').text('reload'); reloadButton.on('click',function(){ reloadImages(); }); var slideshowTimeoutID = null; var slideshowButton = $('<button>').text('play'); slideshowButton.on('click',function(){ slideshow = !slideshow; if(slideshow){ slideshowButton.text('stop'); slideshowTimeoutID = setInterval(function(){ thumbNext(totalPages); // showStatus("play (" + currentPage + "/" + totalPages + ")",true); },slideshowInterval); }else{ slideshowButton.text('play'); clearInterval(slideshowTimeoutID); } }); var closeButton = $('<button>').text('×'); closeButton.on('click',function(){ hideOverlay(); }); var downloadButton = $('<button>').text('dlZip'); downloadButton.on('click',function(){ $('#download > li:nth-child(2) > a')[0].click(); }); var favoriteButton; var t = $('#download > li.bookshelf > a > img').attr('src'); if(t != null){ var favorited = $('#download > li.bookshelf > a > img').attr('src').includes('set'); favoriteButton = $('<button>').text('fav'); function updateFavButton(){ if(favorited){ favoriteButton.text('unfav'); }else{ favoriteButton.text('fav'); } } favoriteButton.on('click',function(){ $('#download > li.bookshelf > a')[0].click(); favorited = !favorited; updateFavButton(); }); updateFavButton(); } var tags = $('<div>').text('△tags').css('color','white'); var showTags = true; var tagList = $('#detail > ul.tag_list').clone(true).css({ 'color':'white', 'display':'flex', 'flex-direction':'column' }); tags.on('click',function(){ showTags = !showTags; if(showTags){ tags.text('△tags'); tagList.show(); }else{ tags.text('▽tags'); tagList.hide(); } }); statusBar.append(status); statusBar.append(statusPopup); mainBlock.append(statusBar); statusPopup.hide(); // sideList.append(status); sideList.append(closeButton); sideList.append(reloadButton); sideList.append(slideshowButton); sideList.append(downloadButton); if(t != null){ sideList.append(favoriteButton); } sideList.append(tags); sideList.append(tagList); sideMenu.append(sideList).append(toggleButton); sideList.hide(); var mainImage = $('<div>') // .attr({'':'', // }) .css({'display':'flex', 'justify-content':'center', 'align-items':'center', '':'', }); mainImage.append($('#thumbnail1').clone(true)); mainBlock.append(mainImage); modalWindow.append(sideMenu).append(mainBlock); $('#container').before(modalWindow); // $('#container').before($('#thumbnail1').clone(true)); // toggleButton.click(); function preload(){ if(!loading){ console.log("load start:"+(finishedPages+1) + "~" + (finishedPages + preloadNum)); loading = true; var url = $('#thumbnail1').attr('src'); var match = url.match(/(http.+\/)(\d{5})\.(jpg|jpeg|gif|png)/i); var index = parseInt(match[2]); var finished = 0; if(interval){ var i = 1; var id = setInterval(function(){ if(loadedPages+1 > totalPages){ clearInterval(id); //idをclearIntervalで指定している console.log("preload finished to " + loadedPages + " pages"); }else{ loadedPages++; } $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){ finished++; finishedPages++; if(finished == preloadNum || finishedPages == totalPages){ loading = false; showStatus("load finished",true); }else{ showStatus('Loading ('+finishedPages+ '/' + totalPages + ')',true); } updateStatus(); }); if(i < preloadNum){ i++; }else{ clearInterval(id); //idをclearIntervalで指定している console.log("preload finished to " + loadedPages + " pages"); } }, intervalTime); }else{ for(var i = 1;i <= preloadNum;i++){ if(loadedPages+1 > totalPages){ break; }else{ loadedPages++; } $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){ finished++; finishedPages++; if(finished == preloadNum|| finishedPages == totalPages){ loading = false; showStatus("load finished",true); }else{ showStatus('Loading ('+finishedPages+ '/' + totalPages + ')',true); } updateStatus(); }); } } } } function reloadImages(){ if(!loading){ loading = true; var currentTotal = loadedPages; loadedPages = 0; var finished = 0; finishedPages = 0; var url = $('#thumbnail1').attr('src'); var match = url.match(/(http.+\/)(\d{5})\.(jpg|jpeg|gif|png)/i); var index = parseInt(match[2]); if(interval){ var i = 1; var id = setInterval(function(){ if(loadedPages+1 > totalPages){ clearInterval(id); //idをclearIntervalで指定している }else{ loadedPages++; } $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){ finished++; finishedPages++; if(finishedPages == currentTotal){ loading = false; console.log("reload finished:" + "~" + currentTotal); showStatus("reload finished",true); }else{ showStatus('Reloading ('+finishedPages+ '/' + currentTotal + ')',true); } updateStatus(); }); if(i < currentTotal){ i++; }else{ clearInterval(id); //idをclearIntervalで指定している } }, intervalTime); }else{ for(var i = 1;i <= currentTotal;i++){ if(loadedPages+1 > totalPages){ break; }else{ loadedPages++; } $('<img>').attr('src',match[1]+("0000"+loadedPages).slice(-5) + "." + match[3]).on('load',function(){ finished++; finishedPages++; if(finishedPages == currentTotal){ loading = false; console.log("reload finished:" + "~" + currentTotal); showStatus("reload finished",true); }else{ showStatus('Reloading ('+finishedPages+ '/' + currentTotal + ')',true); } updateStatus(); }); } } } } // Your code here... $(window).on('scroll',function(e) { e.stopPropagation(); e.preventDefault(); if($(window).scrollLeft() > 0){ $(window).scrollLeft(0); } }); function initSize(){ imageWidth = $('#thumbnail1').width(); imageHeight = $('#thumbnail1').height(); imageRatio = imageWidth/imageHeight; onResize(); } function onResize() { if (timer !== false) { clearTimeout(timer); } timer = setTimeout(function () { // 何らかの処理 windowWidth = $(window).outerWidth(true); windowHeight = $(window).outerHeight(true); modalWindow.css('width','100%').css('height','100%'); windowRatio = windowWidth/windowHeight; if(windowRatio >= imageRatio){ $('#thumbnail1').css('width',windowHeight*imageRatio); $('#thumbnail1').css('height',windowHeight); }else{ $('#thumbnail1').css('width',windowWidth); $('#thumbnail1').css('height',windowWidth/imageRatio); } // statusBar.css('left',(windowWidth-statusBar.width())/2); }, 200); } initSize(); window.addEventListener('resize',onResize); $(window).on('keydown',function(e){ var keycode = e.keyCode; switch(keycode){ case 27: // esc if(fullscreen){ hideOverlay(); }else{ showOverlay(); } break; default: break; } if(fullscreen){ switch(keycode){ case 38: // ↑ thumbPre(totalPages); return false; case 40: // ↓ thumbNext(totalPages); return false; case 116: // F5 reloadImages(); return false; default: break; } } }); var mousewheelevent = 'onwheel' in document ? 'wheel' : 'onmousewheel' in document ? 'mousewheel' : 'DOMMouseScroll'; $(document).on(mousewheelevent,function(e){ var num = parseInt($('.wheel').text()); if(fullscreen){ e.preventDefault(); var delta = e.originalEvent.deltaY ? -(e.originalEvent.deltaY) : e.originalEvent.wheelDelta ? e.originalEvent.wheelDelta : -(e.originalEvent.detail); if (delta < 0){ thumbNext(totalPages); return false; } else { thumbPre(totalPages); return false; } } }); $('#page_num').on('DOMSubtreeModified propertychange',kd); function kd(){ var pageMatch = $('#page_num').text().match(/\((.+)\/(.+)\)/i); if(pageMatch != null){ if(currentPage != pageMatch[1]){ currentPage = pageMatch[1]; updateStatus(); if(currentPage >= loadedPages-(preloadNum/2) && loadedPages !== totalPages){ preload(); } } } } })();