Greasy Fork

来自缓存

Greasy Fork is available in English.

电影天堂跳转豆瓣搜索

在电影天堂、阳光电影、6v电影网、美剧天堂等网站搜到的影片,可以快捷的跳转到豆瓣搜索页面、跳转到下载地址。查看评分、评论、演员信息等

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         电影天堂跳转豆瓣搜索
// @match        *://www.dytt8.net/*
// @match        *://www.ygdy8.com/*
// @match        *://www.dydytt.net/*
// @match        *://www.6v520.com/*
// @match        *://www.6v520.net/*
// @match        *://www.meijutt.tv/*
// @namespace    http://mdkml.cn
// @version      1.0
// @description  在电影天堂、阳光电影、6v电影网、美剧天堂等网站搜到的影片,可以快捷的跳转到豆瓣搜索页面、跳转到下载地址。查看评分、评论、演员信息等
// @author       MDKML
// @icon         http://mdkml.cn/img/favicon.ico
// @grant        none
// ==/UserScript==

(function () {
    'use strict';
    var div = document.createElement('div')
    div.id = 'search-app-box'
    div.style = "position: fixed; top: 120px; left: 20px; font-size: 12px;background-color: #fff;border-radius: 10px;z-index: 9999999999999999;"
    document.body.insertAdjacentElement("afterBegin", div);

    var h = document.getElementsByTagName("H1")
    if (!h || !h[0]) {
        return;
    }
    var name = h[0].innerText;
    if (name.includes("《")) {
        name = name.split("《")[1]
    }
    if (name.includes("》")) {
        name = name.split("》")[0]
    }
    if (name.includes("/")) {
        name = name.split("/")[0]
    }
    let dbss = document.createElement('a')
    dbss.innerText = "豆瓣搜索"
    var style = "display: block;padding:10px;font-size: 18px; font-weight: bold;color:#072;cursor:pointer;border-radius: 25px;text-decoration:none;"
    dbss.style = style
    // 鼠标移入移除效果,相当于hover
    dbss.onmouseenter = function () {
        this.style = style + "color: #ffffff; background-color: #0084ff;box-shadow:0 0 0 10000px rgba(0,0,0,0.3);";
    }
    dbss.onmouseleave = function () {
        this.style = style + "color: #072;";
    }
    dbss.onclick = function () {
        window.open("https://search.douban.com/movie/subject_search?search_text=" + encodeURI(name));
    }
    let xzdz = document.createElement('a')
    xzdz.innerText = "下载地址"
    xzdz.style = style
    // 鼠标移入移除效果,相当于hover
    xzdz.onmouseenter = function () {
        this.style = style + "color: #ffffff; background-color: #0084ff;box-shadow:0 0 0 10000px rgba(0,0,0,0.3);";
    }
    xzdz.onmouseleave = function () {
        this.style = style + "color: #072;";
    }
    xzdz.onclick = function () {
        var targetOffset = null
        var currentURL = window.location.href;
        if (currentURL.includes('6v520')) {
            targetOffset = getEleOffsetTopByText('span', '下载地址');
        }
        if (currentURL.includes('meijutt')) {
            targetOffset = document.getElementsByClassName("o_list_cn_r")[0].offsetTop;
        }
        if (currentURL.includes('dydytt') || currentURL.includes('dytt8') || currentURL.includes('ygdy8')) {
            targetOffset = getEleOffsetTopByText('font', '温馨提示');
        }
        if (targetOffset) {
            targetOffset -= 200;
            smoothScrollTo(targetOffset, 500);
        }

    }
    div.appendChild(dbss)
    div.appendChild(xzdz)

    h[0].appendChild(div);
    // Your code here...
})();

/**
 * 通过元素内容获取顶部偏移像素
 * @param 元素标签
 * @param 元素内容
 * @return 顶部偏移像素
 * @author mdkml
 * @date  2024/9/28 20:17
 */
function getEleOffsetTopByText(ele, text) {
    // 获取所有的span元素
    var spans = document.querySelectorAll(ele);

    // 遍历所有span元素
    for (var i = 0; i < spans.length; i++) {
        // 检查span元素的文本内容是否包含指定的文本
        if (spans[i].textContent.includes(text)) {
            // 如果包含,返回该元素的offsetTop值
            return spans[i].offsetTop;

            // 注意:如果页面中有多个span包含相同的文本,这里只会返回第一个找到的元素的offsetTop。
            // 如果需要处理所有匹配的元素,可以在这里稍作修改。
        }
    }

    // 如果没有找到匹配的span元素,返回null或者一个默认值
    return -1;
}

/**
 * 通过元素内容获取顶部偏移像素
 * @param 元素内容
 * @return 顶部偏移像素
 * @author mdkml
 * @date  2024/9/28 20:03
 */
function getSpanOffsetTopByText(text) {
    // 获取所有的span元素
    var spans = document.querySelectorAll('span');

    // 遍历所有span元素
    for (var i = 0; i < spans.length; i++) {
        // 检查span元素的文本内容是否包含指定的文本
        if (spans[i].textContent.includes(text)) {
            // 如果包含,返回该元素的offsetTop值
            return spans[i].offsetTop;

            // 注意:如果页面中有多个span包含相同的文本,这里只会返回第一个找到的元素的offsetTop。
            // 如果需要处理所有匹配的元素,可以在这里稍作修改。
        }
    }

    // 如果没有找到匹配的span元素,返回null或者一个默认值
    return -1;
}

/**
 * 缓慢滚动页面
 * @param 滚动结束位置
 * @param 滚动时间
 * @author mdkml
 * @date  2024/9/28 20:02
 */
function smoothScrollTo(targetOffset, duration) {
    const startTime = 'now' in window.performance ? performance.now() : new Date().getTime();
    const element = window; // 滚动的是整个窗口

    // 滚动函数
    function scroll() {
        const time = 'now' in window.performance ? performance.now() : new Date().getTime();
        const timeElapsed = time - startTime;

        // 计算当前应该滚动的位置
        const run = easeInOutQuad(timeElapsed, 0, targetOffset, duration);
        element.scrollTo(0, Math.round(run));

        // 如果滚动未完成,则继续请求动画帧
        if (timeElapsed < duration) requestAnimationFrame(scroll);
    }

    // 缓动函数,这里使用二次方缓入缓出(easeInOutQuad)
    function easeInOutQuad(t, b, c, d) {
        t /= d / 2;
        if (t < 1) return c / 2 * t * t + b;
        t--;
        return -c / 2 * (t * (t - 2) - 1) + b;
    }

    // 开始滚动
    scroll();
}