赛博僵尸道长2023

这篇具有很好参考价值的文章主要介绍了赛博僵尸道长2023。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

赛博僵尸道长是针对微博兴趣推荐用户以及不活跃用户问题(俗称僵尸粉)而设计的,旨在轻松快捷地清除微博用户的僵尸粉,使得用户发出的微博获得更多有效曝光及互动。


​​​​更新公告

2023-10-17
1.添加清理微博推荐粉丝开关
2.修复铁粉被误删问题
3.调整深度清粉条件

2023-02-22
1.添加清粉时自动过滤铁粉的功能

2023-01-21
1.赛博僵尸道长2023版本发布,适配新版微博

2022-07-07:
1.添加不相关用户清除功能
2.修复互相关注失效bug

2022-07-02:
1.修复内存泄漏问题。
2.添加可交互面板。

2022-06-29
1.修复深度清粉时页面异常的情况,并加快清理效率。
2.增加心跳复活功能。

2022-06-26:
提供 快速清粉 和 深度清粉 两个模式。
快速清粉:可选择清理满足以下条件的粉丝。

①兴趣推荐

②微博数<3且粉丝数<2 (可以修改参数和判断逻辑,详见说明)

③默认头像
深度清粉:在快速清粉的基础上,可以扫描并清理一定时间内没发微博或点赞的粉丝。(默认365天内,可修改参数)


使用说明

代码已适配新版微博

复制代码后
① 电脑页面打开至新版微博主页
右键菜单->检查元素或按快捷键Ctrl + Shift + I或按F12打开开发者工具
③ 点击Console打开console窗口,将代码粘贴到console窗口后按Enter键运行代码。

赛博僵尸道长,javascript,新浪微博,前端

运行代码后,关掉开发者工具,否则可能再清粉过程中引起网页崩溃,网页将变成如下图所示:
赛博僵尸道长,javascript,新浪微博,前端

快速清粉参数

①清除兴趣推荐用户:清理通过兴趣推荐关注过来的用户。

②排除相互关注:如果是相互关注的用户则跳过。

③只检查通过推荐关注:开启后只检查通过兴趣推荐或者微博推荐关注过来的粉丝。

④清除不活跃用户:开启后将检查粉丝数微博数低于指定数量用户。

⑤最低粉丝数 和 最低微博数:用于判断用户活跃度。

⑥满足任一条件即清除:只要 粉丝数 微博数 小于给定的数值,即判断为不活跃用户。

​⑦清除默认头像用户:清理头像是默认头像的用户。

⑧清除微博推荐用户:清理通过微博推荐关注过来的用户。(可能会清掉真粉丝,需谨慎使用)

​深度清粉参数:

​①开启深度清粉:勾选后开启深度清粉模式,运行时会读取粉丝的微博跟点赞,一旦在指定时间内没有发过微博或点赞,则视为不活跃用户。

​②无视用户最近点赞:开启后深度模式将去检查用户点赞。

​③最小不活跃天数:用于判断用户是否不活跃。

④开启检查关注:勾选后会在深度清粉时去检查当前用户的共同关注

​检测按钮:从第一页开始检测僵尸粉。(不做清理)

​清粉按钮:从第一页开始检测并清理僵尸粉。

如删粉力度不够,除了调高 最小粉丝数最小微博数 之外,还可将开关满足任一条件即清除打开,条件将变为只要 粉丝数 微博数 小于给定的数值,即判断为不活跃用户。

Q&A

Q:运行代码后报错: “Uncaught SyntaxError: Unexpected token …
A:浏览器内核过旧,请使用最新版的谷歌浏览器、火狐浏览器、Edge浏览器。

Q:运行代码后显示微博拒绝连接
A:触发了微博服务器安全策略,可以更换浏览器、更换网络或更换电脑再试试。

使用前请仔细阅读说明。
使用前请仔细阅读说明。
使用前请仔细阅读说明。
文章来源地址https://www.toymoban.com/news/detail-713378.html


代码

let removeTargetFans = false; /*是否删除符合条件的粉丝,默认关闭*/

let deepSearchMode =false; /*是否开启深度清理模式*/
let ignoreLikes = true; /*是否无视用户最近点赞*/
let minDayCount = 180; /*最小不活跃天数*/

let fansMinCount = 2; /*最小粉丝数*/
let weiboMinCount = 3; /*最小微博数*/

let totalCount = 0;

let checkIsFromRecommended = true; /*是否检查通过兴趣推荐关注*/
let checkIsFromWBRecommended = false /*是否检查通过微博推荐关注*/
let checkIsInactive = true; /*是否检查不活跃用户*/
let checkFansOrWeibo = false; /*是否只判断粉丝数或微博数*/
let checkIsFollowing =true; /*是否检查相互关注*/
let checkIsDefaultIcon = false; /*是否检查默认头像*/
let checkIsNormalFollowed = false; /*是否检查关注来源*/

let isError = false;
let isRunning = false;
let userID = 0;
let zeroFanPageCount = 0;

function clearLog()
{
    let logger = document.querySelector("p.logger");
    logger.innerHTML = "";
}

function logError(msg){
    let logger = document.querySelector("p.logger");
    let parent = logger.parentElement;
    logger.innerHTML +="<span style='color: darkred; font-weight:bold;'>" + msg + "</span><br>";
    parent.scrollTop = parent.scrollHeight;
}

function logSuccessMsg(msg){
    let logger = document.querySelector("p.logger");
    let parent = logger.parentElement;
    logger.innerHTML +="<pre style='tab-size: 15em; color: forestgreen;'>" + msg + "</pre>";
    parent.scrollTop = parent.scrollHeight;
}

function  logImportantMsg(msg)
{
    let logger = document.querySelector("p.logger");
    let parent = logger.parentElement;
    logger.innerHTML +="<pre style='font-weight:bold'>" + msg + "</pre>";
    parent.scrollTop = parent.scrollHeight;
}

function logMsg(msg){
    let logger = document.querySelector("p.logger");
    let parent = logger.parentElement;
    logger.innerHTML +="<pre style='tab-size: 15em;'>" + msg + "</pre>";
    parent.scrollTop = parent.scrollHeight;
}

async function removeFanMainFunc() {
    const delay = ms => new Promise(res => setTimeout(res, ms));
    const minute = 1000 * 60;
    const hour = minute * 60;
    const day = hour * 24;

    clearTimeout();
    isError = false;

    let startIndex = 0;
    let pageIndex = 1;

    while(true) {
        if(!isRunning)
        {
            if (removeTargetFans)
                logError("用户退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");
            else
                logError("用户退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");
            break;
        }

        await delay(300);
        let fanListJson = await fetch(
            'https://weibo.com/ajax/friendships/friends?relate=fans&count=20&type=fans&fansSortType=followTime' +
            '&page=' + pageIndex +
            '&uid=' + userID,
            {
                method: "GET",
            }).then(response => response.json())
            .catch((e) => {
            });
        if (fanListJson == null || fanListJson.ok != 1 || fanListJson['users'].length === 0) {
            fanListJson = await fetch(
                'https://weibo.com/ajax/friendships/friends?relate=fans&count=20&type=fans&fansSortType=followTime' +
                '&page=' + pageIndex +
                '&uid=' + userID,
                {
                    method: "GET",
                }).then(response => response.json())
                .catch((e) => {
                });

            if (fanListJson == null || fanListJson.ok != 1) {
                if (removeTargetFans)
                    logError("请求异常,退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");
                else
                    logError("请求异常,退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");
                break;
            }
        }


        let fans = fanListJson['users'];
        let count = 0;

        for (let i = startIndex; i < fans.length; i++) {
            if(!isRunning)
            {
                if (removeTargetFans)
                    logError("用户退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");
                else
                    logError("用户退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");
                return;
            }

            let isFromRecommended = false;
            let isFromWBRecommended = false;
            let isInactive = false;
            let isFollowing = false;
            let isDefaultIcon = false;
            let isNormalFollowed = false;
            let isIrrelevant = false;
            let fansCount, weiboCount;

            /*关注来源*/
            let originSrc = fans[i]['origin_source_info'];
            isNormalFollowed = originSrc != null && originSrc['text'] !== "兴趣推荐" && originSrc['text'] !== "微博推荐";

            /*是否为铁粉*/
            if(fans[i]['fansIcon'] != null)
            {
                if(fans[i]['fansIcon'].name == "loyal_fans")
                    continue;
            }


            /*是否为非推荐的会员*/
            if (isNormalFollowed && (fans[i]['mbtype'] === 12))
                continue;

            /*关注来源是否为兴趣推荐*/
            if (checkIsFromRecommended) {
                isFromRecommended = originSrc != null && originSrc['text'] === "兴趣推荐";
            }

            if (checkIsFromWBRecommended) {
                isFromWBRecommended = originSrc != null && originSrc['text'] === "微博推荐";
            }

            let fanID = fans[i]['id'];
            let fanName = fans[i]['name'];

            /*粉丝数与微博数*/
            if (checkIsInactive) {
                fansCount = fans[i]['followers_count'];
                weiboCount = fans[i]['statuses_count'];
                if (checkFansOrWeibo)
                    isInactive = fansCount < fansMinCount || weiboCount < weiboMinCount;
                else
                    isInactive = fansCount < fansMinCount && weiboCount < weiboMinCount || weiboCount === 0 || fansCount === 0;
            }

            /*是否为默认头像*/
            if (checkIsDefaultIcon) {
                let icon = fans[i]['avatar_hd'];
                isDefaultIcon = icon != null && icon.includes("/default/images/default_avatar_");
            }
            /*是否互相关注*/
            if (checkIsFollowing) {
                isFollowing = fans[i]['following'];
            }

            let isZombie = false;
            if (!isFollowing)
                if (!checkIsNormalFollowed || (checkIsNormalFollowed && !isNormalFollowed))
                    if (isDefaultIcon || isFromRecommended || isFromWBRecommended || isInactive || isDefaultIcon || (deepSearchMode && weiboCount === 0))
                        isZombie = true;

            /*深度检查*/
            if (deepSearchMode && !isFollowing && !isZombie) {
                await delay(600);
                let weiboJson = await fetch('https://weibo.com/ajax/statuses/mymblog?page=1&feature=0&uid=' + fanID, {
                    method: "GET",
                }).then(response => response.json())
                    .catch((e) => {
                    });


                if (weiboJson == null || weiboJson.ok != 1) {
                    await delay(800);
                    weiboJson = await fetch('https://weibo.com/ajax/statuses/mymblog?page=1&feature=0&uid=' + fanID, {
                        method: "GET",
                    }).then(response => response.json())
                        .catch((e) => {
                        });

                    if (weiboJson == null || weiboJson.ok != 1) {
                        logError(fanName + "主页请求失败,跳过检查");
                        continue;
                    }
                }

                let weiboList = weiboJson.data['list'];
                let invalidWeiboCount = 0;
                let validWeiboCount = 0;
                let currDate = Date.now();
                for (let index = 0; index < weiboList.length; index++) {
                    let currWeibo = weiboList[index];
                    let weiboSrc = currWeibo['source'];
                    if(weiboSrc != null && weiboSrc.includes("生日动态"))
                        continue;

                    if (weiboSrc != null && (weiboSrc.includes("渔场") ||
                        weiboSrc.includes("活动") || weiboSrc.includes("森林") || weiboSrc.includes("微博积分") ||
                        weiboSrc.includes("支付宝") || weiboSrc.includes("淘宝") || weiboSrc.includes("芭芭农场") ||
                        weiboSrc.includes("任务") || weiboSrc.includes("签到") || weiboSrc.includes("新浪游戏") ||
                        weiboSrc.includes("微博游戏") || weiboSrc.includes("红包") || weiboSrc.includes("微博会员") ||
                        weiboSrc.includes("微博运动") || weiboSrc.includes("熊猫守护者") || weiboSrc.includes("点淘") ||
                        weiboSrc.includes("绿植领养")
                    )) {
                        invalidWeiboCount++;
                        continue;
                    }

                    if (ignoreLikes && currWeibo['title'] != null && currWeibo['title']['text'].includes("赞"))
                        continue;

                    let createTime = currWeibo['created_at'];
                    if (currWeibo['retweeted_status'] != null) {
                        createTime = currWeibo['retweeted_status']['created_at'];
                    }

                    if (Math.round((currDate - new Date(createTime)) / day) <= minDayCount) {
                        validWeiboCount++;
                    }

                    invalidWeiboCount--;
                }

                if (invalidWeiboCount > 3) {
                    isIrrelevant = true;
                    isZombie = true;
                }

                if (validWeiboCount < 2) {
                    isInactive = true;
                    isZombie = true;
                }
            }
            await delay(300);
            if (isZombie) {
                let reason = "原因: ";
                if (isFromRecommended)
                    reason += " 兴趣推荐";
                if (isFromWBRecommended)
                    reason += " 微博推荐";
                if (isInactive)
                    reason += " 不活跃用户";
                if (isIrrelevant)
                    reason += " 不相关用户";
                if (isDefaultIcon)
                    reason += " 默认头像";
                if (removeTargetFans) {
                    let fData = new FormData();
                    fData.append("uid", fanID);
                    fData.append("_t", "0");
                    const json = await fetch('/aj/f/remove?ajwvr=6&__rnd=' + Math.round(new Date().getTime()), {
                        method: "POST",
                        body: fData
                    }).then(response => response.json())
                        .catch((e) => {
                        });

                    if (json != null && json.code == 100000) {
                        logSuccessMsg(fanName + "\t删除成功 " + reason);
                        count++;
                        totalCount++;
                    } else
                        logError(fanName + "\t删除失败 ");
                } else {
                    logMsg(fanName + "\t疑似僵尸粉 " + reason);

                    count++;
                    totalCount++;
                }
            }
        }

        if (fans.length > 0) {
            startIndex = 0;
            zeroFanPageCount = 0;
            if (removeTargetFans) {
                logImportantMsg("第 " + pageIndex + " 页删除了 " + count + " 个粉丝");
                if (count > 0) {
                    startIndex = fans.length - count;
                    if (startIndex < 0) startIndex = 0;
                } else {
                    pageIndex++;
                }
            } else {
                logImportantMsg("第 " + pageIndex + " 页发现了 " + count + " 个疑似僵尸粉");
                pageIndex++;
            }
        } else {
            if(zeroFanPageCount < 5)
            {
                zeroFanPageCount++;
                pageIndex++;
            }else {
                if (removeTargetFans)
                    logError("已到达粉丝列表上限,退出程序。总计清理了 " + totalCount + " 个疑似僵尸粉");
                else
                    logError("已到达粉丝列表上限,退出程序。总计发现了 " + totalCount + " 个疑似僵尸粉");
                break;
            }
        }
    }
    StopFunc();
}

function RemoveFans(startIndex){
    let p = new Promise(function(){removeFanMainFunc(startIndex)});
}

let InitParameters = ()=>
{
    checkIsFromRecommended = document.body.querySelector("input#checkIsFromRecommended").checked;
    checkIsFromWBRecommended = document.body.querySelector("input#checkIsFromWBRecommended").checked;
    checkIsFollowing = document.body.querySelector("input#checkIsFollowing").checked;
    checkIsNormalFollowed = document.body.querySelector("input#checkIsNormalFollowed").checked;
    checkIsDefaultIcon= document.body.querySelector("input#checkIsDefaultIcon").checked;

    checkIsInactive = document.body.querySelector("input#checkIsInactive").checked;
    checkFansOrWeibo = document.body.querySelector("input#checkFansOrWeibo").checked;
    fansMinCount = parseInt(document.body.querySelector("input#fansMinCount").value);
    weiboMinCount = parseInt(document.body.querySelector("input#weiboMinCount").value);

    deepSearchMode = document.body.querySelector("input#deepSearchMode").checked;
    ignoreLikes = document.body.querySelector("input#ignoreLikes").checked;
    minDayCount = parseInt(document.body.querySelector("input#minDayCount").value);
};

let StartCheckFans = ()=>
{
    SetMode("running");
    InitParameters();
    clearLog();
    totalCount = 0;
    removeTargetFans = false;
    isRunning = true;
    RemoveFans(0);
};

let StartRemoveFans = ()=>
{
    SetMode("running");
    InitParameters();
    clearLog();
    totalCount = 0;
    removeTargetFans = true;
    isRunning = true;
    RemoveFans(0);
};

let StopFunc = ()=>
{
    SetMode("ready");
    clearInterval();
    clearTimeout();
    isRunning = false;
};

let SetDeepSearchParam = ()=>{
    let disable = document.body.querySelector("input#deepSearchMode").checked === false;
    let params = document.body.querySelectorAll("input.DeepSearchParam");
    for(let i = 0; i < params.length; i++)
        params[i].disabled = disable;
};

let SetMode = (mode) =>{
    let params = document.querySelector("div.parameter").querySelectorAll("input");
    let readyPanel = document.querySelector("div.ready");
    let runningPanel = document.querySelector("div.running");
    if(mode === "running")
    {
        for(let i = 0; i < params.length; i++) params[i].disabled = true;
        readyPanel.style.display = "none";
        runningPanel.style.display = "";
    }
    else if(mode === "ready")
    {
        for(let i = 0; i < params.length; i++) params[i].disabled = false;
        runningPanel.style.display = "none";
        readyPanel.style.display = "";
    }
};

let ReplaceHTML = ()=>
{
    let list = document.querySelector("div.woo-box-flex.woo-tab-nav")?.querySelectorAll("a");
    let href = document.location.href;
    if(list == null || list.length !== 5) {
        if(document.location.href.includes("https://weibo.com/u/"))
        {
            userID = document.location.href.replace("https://weibo.com/u/", "");
            let numIndex = 0;
            for(numIndex = 0; numIndex <  userID.length; numIndex++)
            {
                if(userID[numIndex] < '0' || userID[numIndex] > '9')
                    break;
            }
            userID = userID.slice(0, numIndex);
        }else {
            console.error("无法找到用户id,请打开微博主页再运行代码");
            return;
        }
    }else{
        userID = list[4].href.replace("https://weibo.com/u/", "");
        href = "https://weibo.com/u/page/follow/"+ userID +"?relate=fans";
    }


    document.head.innerHTML = '<meta charset="UTF-8"><title>赛博僵尸道长v2023.10</title>';
    let body = '<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Title</title><script src="RemoveZombiesUI.js"></script></head><body><div class="left"style="position: fixed;  display: flex; flex-direction: column;top:0; left:0; bottom:0; width:500px; background-color: burlywood;"><h1 style="text-align:center; margin: 10px;">赛博僵尸道长<span style="font-size: 20px;">v2023.10 作者:<a href="https://weibo.com/u/3696426802">小蛊</a></span></h1><div class="parameter"><h3>快速清粉参数</h3><table style="width: 100%; font-size: 15px;"><tr><td><input id="checkIsFromRecommended"type="checkbox"style="height: 15px; width: 15px;"checked>清除兴趣推荐用户</td><td><input id="checkIsFollowing"type="checkbox"style="height: 15px; width: 15px;"checked>排除相互关注</td><td><input id="checkIsNormalFollowed"type="checkbox"style="height: 15px; width: 15px;">只检查通过推荐关注</td></tr><tr style="height: 10px;"></tr><tr><td rowspan="2"><input id="checkIsInactive"type="checkbox"style="height: 15px; width: 15px;"checked>清除不活跃用户</td><td>最低粉丝数<input id="fansMinCount"type="number"style="height: 15px; width: 60px;"min="0"value="2"></td><td rowspan="2"><input id="checkFansOrWeibo"type="checkbox"style="height: 15px; width: 15px;">满足任一条件即清除</td></tr><tr><td>最低微博数<input id="weiboMinCount"type="number"style="height: 15px; width: 60px;"min="0"value="3"></td></tr><tr><td><input id="checkIsDefaultIcon"type="checkbox"style="height: 15px; width: 15px;">清除默认头像用户</td><td><input id="checkIsFromWBRecommended"type="checkbox"style="height: 15px; width: 15px;">清除微博推荐用户</td></tr></table><h3>深度清粉参数</h3><table style="width: 100%; font-size: 15px;"><tr><td><input id="deepSearchMode"type="checkbox"style="height: 15px; width: 15px;"οnchange="SetDeepSearchParam();">开启深度清粉</td><td>最小不活跃天数:<input class="DeepSearchParam"id="minDayCount"type="number"style="height: 15px; width: 40px;"min="0"value="365"disabled></td><td><input class="DeepSearchParam"id="ignoreLikes"type="checkbox"style="height: 15px; width: 15px;"checked disabled>无视用户最近点赞</td></tr></table></div><div class="ready"><button style="position: relative; height: 45px; width:48%; font-size: 16px; margin: 4px 2px;"οnclick="StartRemoveFans();">清粉</button><button style="position: relative; height: 45px; width:48%; font-size: 16px; margin: 4px 2px;"οnclick="StartCheckFans();">检测</button></div><div class="running"style="display: none"><button style="position: relative; height: 45px; width:98%; font-size: 16px; margin: 4px 2px;"οnclick="StopFunc();">停止</button></div><div style="position: relative; margin: 4px 2px; flex-grow: 1; width: 100%; background-color: azure; overflow-y: scroll;"><p class="logger"></p></div><div style="position: absolute; bottom: 0px; height: 1px; width:100%; background-color: black"></div></div><div style="position: fixed; top:0; left: 500px; bottom: 0; right: 0;"><iframe class="web"src=""sandbox="allow-same-origin allow-scripts"style="width:100%; height:100%;"></iframe></div></body></html>';
    document.body.innerHTML = body.replaceAll('ο', 'o');
    let iframe = document.body.querySelector('iframe.web');
    iframe.src = href;
    iframe.onload=()=>{ iframe.contentDocument.body.querySelector("div[node-type=outer]")?.remove(); }
}

ReplaceHTML();

到了这里,关于赛博僵尸道长2023的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【自看】2023前端面试上岸手册——JavaScript

    JavaScript 共有八种数据类型,分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型: Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。 BigInt 是一种数字类型的数据,它可

    2024年02月02日
    浏览(53)
  • 2023前端面试上岸手册——JavaScript部分

    JavaScript 共有八种数据类型,分别是 Undefined、Null、Boolean、 Number、String、Object、Symbol、BigInt。 其中 Symbol 和 BigInt 是ES6 中新增的数据类型: Symbol 代表创建后独一无二且不可变的数据类型,它主要是为了解决可能出现的全局变量冲突的问题。 BigInt 是一种数字类型的数据,它可

    2024年02月02日
    浏览(51)
  • 2023年web前端开发之JavaScript进阶(一)

    接上篇博客进行学习,通俗易懂,详细 博客地址: 2023年web前端开发之JavaScript基础(五)基础完结_努力的小周同学的博客-CSDN博客 学习 作用域 、变量提升、 闭包 等语言特征,加深对 JavaScript 的理解,掌握变量赋值、函数声明的简洁语法, 降低代码的冗余度 。 理解作用域对程序

    2024年02月03日
    浏览(54)
  • 前端人必看!2023年JavaScript的发展格局究竟如何?

    在互联网世界中中,所有的信息都瞬息万变,了解信息是提升自己的关键。但我们能够了解2023年web 的发展趋势吗?通过研究2022年开发者调查的数据,我们能够看着这些关键有用的信息。 包管理 去年,我建议我们注意PNPM的兴起,它的目的是避免版本冲突,并与monorepos玩得很

    2024年02月05日
    浏览(40)
  • 前端学习记录~2023.8.10~JavaScript重难点实例精讲~第6章 Ajax

    本章是第六章Ajax相关的内容。 Ajax是一种流行的前后端数据交互的方式,通过异步请求就可以在不需要刷新页面的情况下,达到局部刷新的效果。 Ajax并非是一种全新的技术,而是由以下技术组合而成: 使用CSS和XHTML做页面呈现 使用DOM进行交互和动态显示 使用XMLHttpRequest对象

    2024年02月11日
    浏览(38)
  • 前端学习记录~2023.8.3~JavaScript重难点实例精讲~第5章 DOM与事件

    本章是第五章DOM与事件相关的内容。 DOM是文档对象模型,全称为Document Object Model。DOM用一个逻辑树来表示一个文档,树的每个分支终点都是一个节点,每个节点都包含着对象。DOM提供了对文档结构化的表述,通过绑定不同的事件可以改变文档的结构、样式和内容,从而能实现

    2024年02月12日
    浏览(47)
  • 前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度

    前端仿新浪新闻 tabs 选项卡tabs标签页,根据文字多少自适应 tab项宽度, 阅读全文下载完整代码请关注微信公众号: 前端组件开发 效果图如下:     实现代码如下: #### 使用方法 ```使用方法 !-- v-model:选择序列 tabs:选择数组 myColor:下划线颜色 spaceLeft:tabs间距 height:设置高度

    2024年02月08日
    浏览(33)
  • 前端小游戏——植物大战僵尸

    给大家分享一个植物大战僵尸网页游戏源代码,感兴趣的小伙伴可收藏学习 (完整源码在文末) 先来一睹“芳容” 《植物大战僵尸》 是一款极富策略性的小游戏。可怕的僵尸即将入侵,每种僵尸都有不同的特点,例如铁桶僵尸拥有极强的抗击打能力,矿工僵尸可以挖地道绕

    2024年02月03日
    浏览(44)
  • 前端2023最全面试题(javaScript、typeScript、vue2、vue3、html、css、uniapp、webpack、vite、react)

    答案:JavaScript中的闭包是一种函数,它有权访问其词法环境的变量和其它函数。这意味着,即使其包含它的函数已经执行完毕,其词法环境仍然存在,因此可以访问其作用域内的变量。 答案:回调函数是在某个特定事件之后执行的函数。在JavaScript中,通常使用回调函数来处

    2024年02月06日
    浏览(62)
  • 学习:赛博空间 Cyberspace 概念

    学习:赛博空间 Cyberspace 概念 赛博空间是哲学和计算机领域中的一个抽象概念, 指的是以计算机、现代通讯网络、虚拟现实等信息技术的综合运用为基础, 以知识和信息为内容的用于知识交流的虚拟空间。 就如元宇宙Metaverse是由meta和universe两个词的组合, Cyberspace一词是控

    2023年04月09日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包