Brains - 灵感乌托邦 - 技术教程
type: channel
link: https://www.fuuuy.cn/tag/技术/
items: 『原创』『教程』博客评论框添加随机一言
items: 『原创』『教程』为你的博客添加阅读模式（适配Joe，其他主题也可用）
items: 『转载』『教程』搭建z-file文件目录并开启反向代理，可做图床和网盘
items: 『转载』『教程』H5ai（Dplayer）完整安装使用教程及注意事项
items: 『原创』『表情』为Joe主题增加QQ，Bilibili，酷安，贴吧，微博表情包
items: 『原创』『教程』搭建在线VSCode，部署Code-Server并配置反向代理实现域名访问
items: 『修复』『插件』Typecho文章内容分页插件修复版（适配Joe编辑器）
items: 『笔记』JavaScript基础学习笔记 5 — DOM（文本对象模型）
items: 『转载』『教程』Joe主题实现评论图片功能
items: 『原创』『教程』首页及文章页滚动广告栏

『原创』『教程』博客评论框添加随机一言
type: item
date: 2022-12-27T10:32:00+08:00
description: 前言由于我的博客之前经常有人回复一些无意义的内容，导致很多垃圾评论所以我在想既然很多游客喜欢回复一些垃圾评论，不如我直接设置一个随机一言，让他们省去了垃圾评论的打字时间，同时又能让我的评论区少一些无意义的评论而且那些真正认真回复的人只需要一键删除即可，也不会很影响评论体验，所以就给自己的评论框添加了随机一言前段时间有小伙伴留言让我出个评论随机一言的教程，而我这边突然爆发了疫情，前些天自己又感染了，所以一直拖到现在效果展示按照惯例，先来一波效果展示本教程仅以Joe主题为例，其他主题可自行发挥能力，如有技术问题，博主可提供简单的指导教程开始一、添加后台控制在 Joe/functions.php 或者 Joe/public/custom.php（有的话） 内添加以下代码// 评论框随机语录功能 $Comment_Citation = new Typecho_Widget_Helper_Form_Element_Select( 'Comment_Citation', array('off' => '关闭（默认）', 'on' => '开启'), 'off', '是否开启评论框随机语录功能', '介绍：开启后，评论框自动随机填充随机语录' ); $Comment_Citation->setAttribute('class', 'joe_content joe_change'); // 如果后台无法展示该设置，将joe_change修改为joe_other $form->addInput($Comment_Citation->multiMode()); //评论框随机语录链接/文字 $Comment_Citation__text = new Typecho_Widget_Helper_Form_Element_Textarea( 'Comment_Citation__text', NULL, "https://api.vvhan.com/api/ian", '评论框随机语录', '介绍：用于修改评论框随机语录（可以为api地址） 格式：一行一个，可以为api地址，也可为文字，可以填写多个API地址 注意：必须填写JSON格式的API，API需要开启跨域权限才能调取，否则会调取失败！ 如果为api地址可在前台按钮刷新内容，如果为文字只能刷新页面来刷新内容（建议使用api地址） 推荐API：https://api.vvhan.com/api/ian' ); $Comment_Citation__text->setAttribute('class', 'joe_content joe_change'); // 如果后台无法展示该设置，将joe_change修改为joe_other $form->addInput($Comment_Citation__text);二、添加刷新按钮（可省略）在 Joe/public/comment.php 添加以下代码，不添加则不设置刷新按钮{tabs}{tabs-pane label="添加位置"}{/tabs-pane}{tabs-pane label="添加代码"}<?php if ($this->options->Comment_Citation !== "off") : ?> 语录 <?php endif; ?>{/tabs-pane}{/tabs}三、添加内容获取1、添加后端获取在 Joe/core/function.php 添加以下代码{tabs}{tabs-pane label="添加位置"}{/tabs-pane}{tabs-pane label="添加代码"}/* 获取评论框随机语录 */ function _getComment_Citation() { $CitationRandom = explode("\r\n", Helper::options()->Comment_Citation__text); echo $CitationRandom[array_rand($CitationRandom)]; }{/tabs-pane}{/tabs}2、添加前端获取在 Joe/public/config.php 添加以下代码{tabs}{tabs-pane label="添加位置"}{/tabs-pane}{tabs-pane label="添加代码"}CITATION: `<?php _getComment_Citation() ?>`, // 评论随机语录{/tabs-pane}{/tabs}四、添加核心代码在 Joe/assets/js/joe.global.min.js 或者 Joe/assets/js/custom.min.js（有的话） 添加以下代码{hide}if ($(".Com…

『原创』『教程』为你的博客添加阅读模式（适配Joe，其他主题也可用）
type: item
date: 2022-08-22T11:04:00+08:00
description: 前言我又来拔flag了，最近立了好多flag，但是最近重庆太热了，不想写文章（其实就是懒了）既然给小伙伴立了flag，还是要说到做到，不然没有小伙伴来玩了。这个功能也是xcshare定制的功能，但是我还是分享出来吧成果展示教程开始一、添加后台开关一样的，还是在 Joe/functions.php 里添加（也可以在 Joe/public/custom.php 里添加，前提是你创建并引用了这个文件）// 是否启用阅读模式 $ReadBook = new Typecho_Widget_Helper_Form_Element_Select( 'ReadBook', array( 'off' => '关闭（默认）', 'on' => '开启'), 'off', '请选择是否启用阅读模式', '介绍：开启后，文章页可以进入阅读模式' ); $ReadBook->setAttribute('class', 'joe_content joe_custom'); //没有joe_custom就改成joe_other $form->addInput($ReadBook->multiMode());二、添加开关按钮在 Joe/public/footer.php 的 内部添加以下代码 <?php if ($this->options->ReadBook === 'on' && $this->is('post')) : ?> <path d="M170.666667 128a42.666667 42.666667 0 0 0-42.666667 42.666667v597.333333a42.666667 42.666667 0 0 0 42.666667 42.666667h161.664a213.333333 213.333333 0 0 1 118.314666 35.84l61.354667 40.874666 61.354667-40.874666A213.333333 213.333333 0 0 1 691.626667 810.666667H853.333333a42.666667 42.666667 0 0 0 42.666667-42.666667V170.666667a42.666667 42.666667 0 0 0-42.666667-42.666667h-161.664c-17.706667 0-44.672 7.68-67.413333 20.906667-11.008 6.4-18.944 12.928-23.637333 18.346666a23.978667 23.978667 0 0 0-3.413334 4.821334V682.666667a42.666667 42.666667 0 0 1-85.333333 0V170.666667c0-24.746667 11.861333-44.970667 24.192-59.221334a178.688 178.688 0 0 1 45.354667-36.352c32.384-18.773333 74.026667-32.426667 110.250666-32.426666H853.333333a128 128 0 0 1 128 128v597.333333a128 128 0 0 1-128 128h-161.664a128 128 0 0 0-70.997333 21.504l-84.992 56.661333a42.666667 42.666667 0 0 1-47.36 0l-84.992-56.661333A128 128 0 0 0 332.330667 896H170.666667a128 128 0 0 1-128-128V170.666667a128 128 0 0 1 128-128h161.664a213.333333 213.333333 0 0 1 118.314666 35.84 42.666667 42.666667 0 0 1-47.317333 70.997333A128 128 0 0 0 332.330667 128H170.666667z" p-id="9868" fill="var(--minor)" data-spm-anchor-id="a313x.7781069.0.i0" class="selected"></path> <path d="M213.333333 384a42.666667 42.666667 0 0 1 42.666667-42.666667h128a42.666667 42.666667 0 0 1 0 85.333334H256a42.666667 42.666667 0 0 1-42.6…

『转载』『教程』搭建z-file文件目录并开启反向代理，可做图床和网盘
type: item
date: 2022-03-13T18:40:00+08:00
description: ZFile此项目是一个在线文件目录的程序, 支持各种对象存储和本地存储, 使用定位是个人放常用工具下载, 或做公共的文件库. 不会向多账户方向开发.前端基于 h5ai 的原有功能使用 Vue 重新开发、后端采用 SpringBoot, 数据库采用内嵌数据库.成果安装教程一、安装依赖基于java开发，所以要先安装java环境# CentOS系统 yum install -y java-1.8.0-openjdk unzip # Debian/Ubuntu系统 apt update apt install -y openjdk-8-jre-headless unzip 二、下载、上传项目{hide}github下载{cloud title="zfile" type="github" url="https://github.com/zhaojun1998/zfile" password=""/}最新版的3.2.1有一个bug，部分服务器会出现短链无法使用，作者已经修复，但是未更新github的版本，我这里下载了一份作为备份{cloud title="zfile" type="default" url="https://file.fuuuy.cn/s/0p6616" password=""/}{/hide}直接下载并上传到网站根目录，然后解压得到以下目录z-file ├─ META-INF ├─ WEB-INF └─ bin ├── start.sh # 启动脚本 ├── stop.sh # 停止脚本 └── restart.sh # 重启脚本三、开启部署服务直接在当前目录打开终端输入以下代码./bin/start.shWeb默认端口为8080，如需修改端口可直接编辑配置文件 /zfile/WEB-INF/classes/application.yml 启动之后部署工作即宣告完成，可以在浏览器里直接输入ip:8080进入Web进行下一步配置，如果觉得每次都要加端口号麻烦可以参考后续设置反代。 具体访问地址如下四、域名访问在宝塔面板中添加一个新的网站如果想要开启HTTPS可以在设置反代之前在SSL选项卡配置证书打开反向代理选项卡，选择添加反向代理，端口填你设置的端口号（我这里改成了8282），如图配置五、初始化因为上一步已经配置了域名访问，所以直接输入域名，无需再加端口号，设置管理用户名和密码。输入 域名/#/admin进入管理后台，可以设置域名，外观设置，修改密码，添加存储等。六、更多用法1、文件夹加密直接在欲加密的文件夹中上传一个名为“password.txt”的文件即可，密码即为文件内容。加密之后效果如图2、显示readme如果想在某个文件夹中显示readme文件，直接在该文件夹中上传readme.md文件即可，同时需要在后台中开启显示文档区功能。3、可以作为图床使用如果你的博客需要图片外链，那么你可以将图片上传到某个目录，接着在zfile中打开这个目录，找到图片文件，右键并选择复制直链，这样就获取了这张图片的直链。总结Z-File作为一款开源免费的网盘列表程序，优点还是很多的。安装部署和配置都比较方便，也可以生成固定的文件链接，使用定位是个人放常用工具下载, 或做公共的文件库. 不会向多账户方向开发。

『转载』『教程』H5ai（Dplayer）完整安装使用教程及注意事项
type: item
date: 2022-03-13T17:51:00+08:00
description: 前言关于如何搭建 H5ai ，网上虽然有很多教程，但详细的却不多，有的也是比较模糊。本文将介绍一下如何在宝塔Nginx环境下搭建 H5ai 以及其中的一些注意事项。成果H5ai是一款德国程序员Lars Jung打造的基于HTTP Web服务器的现代文件索引器，是一款功能强大的PHP文件目录列表程序，适合做个人仓库，它提供多种文件目录列表呈现方式，支持 Apache Httpd, Lighttpd, Nginx等多种WEB服务器，支持多国语言（如英语，简体中文等），你可以在线预览以及下载TXT，图片，音频，视频等文件格式。 安装教程一、环境要求{callout color＝"#f0ad4e"}Nginx - MySQLPHP 7.1或以上phpMyAdmin{/callout}二、添加站点请在左边的菜单栏,找到网站,然后点击添加站点,输入相关信息后点击提交即可 三、H5ai下载将文件解压后放在网站根目录下的_h5ai文件夹内，结构如下 下载地址{hide}{cloud title="h5ai" type="default" url="https://release.larsjung.de/h5ai/h5ai-0.30.0.zip" password=""/}{/hide}DOC_ROOT ├─ _h5ai ├─ your files └─ and folders 四、上传文件把你需要列的文件及目录放在_h5ai同目录下即可（我这里是把_去掉了） 五、修改配置文件在宝塔面板首页->左边的网站 -> H5ai(放H5ai的网站) -> 设置 -> 配置文件中六、查看依赖信息访问 http(s)://你的网站名/_h5ai/public/index.php来查看H5ai的功能开放情况，默认密码为空 右边已经是yes或者变成绿色的,证明对应的依赖已经安装成功 七、配置PHP1、安装Use EXIF thumbs{callout color＝"#2bff00"}安装imagemagick和exifUse EXIF thumbs会显示成yes{/callout}2、Movie thumbs (ffmpeg)安装CentOS 6和7安装方法是不一样的，下面分别说明： 安装前都需要先安装epel扩展源:# yum -y install epel-release # su -c ‘yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-6.noarch.rpm https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-6.noarch.rpm‘ # yum -y install ffmpeg ffmpeg-devel 3、PDF thumbs安装选择安装convert# yum -y install ImageMagick 4、Shell tar/Shell zip/Shell du安装这三项根据h5ai官网,在 php.ini被禁用函数中去掉 exec和 passthru即可，是否有危险不知道,自己掂量,禁用好像也不影响一些功能，另外顺便把 scandir函数去掉禁用，不然会出现无非显示目录中文件的情况。 在你的软件商店中找到你下载的PHP版本–进入设置–禁用函数 {callout color＝"#14ffb9"}删除exec 和 passthruShell tar Shell zip Shell du就会显示成yes{/callout}八、给H5ai加密码首先我们要找到这个文件 _h5ai/public/index.php ，在最下面增加以下代码：function mima() { $user＝array(‘填写你的用户名‘,‘填写你的密码‘); if(!($user[0]＝＝＝$_SERVER[‘PHP_AUTH_USER‘] && $user[1]＝＝＝$_SERVER[‘PHP_AUTH_PW‘])){ header(‘WWW-Authenticate: Basic realm＝"MY Mark"‘); header(‘HTTP/1.0 401 Unauthorized‘); die("please login"); } } 然后在第一行，也就是<?php的下面（也就是第二行）插入以下代码：php mima(); 九、注意事项1、读取不出文件如果存在文件，但读不出来，可能原因就是 php 已禁用 scandir函数了，请修改 php.ini解决。 disable_functions＝passthru,exec,system,chr…

『原创』『表情』为Joe主题增加QQ，Bilibili，酷安，贴吧，微博表情包
type: item
date: 2021-12-28T09:53:00+08:00
description: 前言最近失恋了，就一直在学习前端基础，所以个人博客都好久没更新了偶然在翠翠的博客看到给typecho添加表情包的教程，所以自己也添加了两组表情包但是在添加途中遇到了一个问题，所以将自己遇到的坑记录下来成果展示后台编辑器代码位置 教程开始一、添加表情过滤因为Joe主题之前被人恶意注入过xss，因此主题作者添加了关键词屏蔽，所以还要进行过滤拿到一个表情包后，在 windows 系统中下这样操作，在表情包文件夹内创建一个 文本文档 然后双击打开，使用以下命令生成该文件夹文件（图片）列表：dir /b > list.txt 保存后将文件后缀改为 bat ，然后再双击打开，就会生成一个 list.txt 文件生成的 list.txt 就包含了改目录下的全部文件名，就可以很方便的批处理。 关键词拼串可以使用Excel进行，直接使用以下代码就行=A2&$F$2&A3 =E2&$F$2&A4然后打开 Joe/core/parse.php 文件，找到表情过滤在下面添加你表情的关键词与表情地址{tabs}{tabs-pane label="添加位置"}{/tabs-pane}{tabs-pane label="代码"}{hide}$text = preg_replace_callback( '/\:\#\(\s*(doge|亲亲|偷笑|再见|发怒|发财|可爱|吐血|呆|呕吐|困|坏笑|大佬|大哭|委屈|害羞|尴尬|微笑|思考|惊吓|打脸|抓狂|抠鼻子|斜眼笑|无奈|晕|流汗|流鼻血|点赞|生气|生病|疑问|白眼|睡着|笑哭|腼腆|色|调皮|鄙视|闭嘴|难过|馋|黑人问号|鼓掌)\s*\)/is', function ($match) { return ' themeUrl . '/assets/owo/bilibili/' . str_replace('%', '', urlencode($match[1])) . '.gif" alt="小电视"/>'; }, $text ); $text = preg_replace_callback( '/\:\$\(\s*(爱你|爱心|傲慢|白眼|棒棒糖|爆筋|抱拳|鄙视|闭嘴|擦汗|菜刀|吃|呲牙|大兵|大哭|蛋|得意|doge|发呆|发怒|奋斗|尴尬|勾引|鼓掌|害羞|憨笑|好棒|哈欠|喝彩|河蟹|坏笑|饥饿|惊恐|惊喜|惊讶|菊花|可爱|可怜|抠鼻|酷|快哭了|骷髅|困|篮球|泪奔|冷汗|流汗|流泪|难过|OK|喷血|撇嘴|啤酒|强|敲打|亲亲|糗大了|拳头|骚扰|色|胜利|手枪|衰|睡|调皮|偷笑|吐|托腮|委屈|微笑|握手|我最美|无奈|吓|小纠结|笑哭|小样儿|斜眼笑|西瓜|嘘|羊驼|阴险|疑问|右哼哼|幽灵|晕|再见|眨眼睛|折磨|咒骂|抓狂|左哼哼)\s*\)/is', function ($match) { return ' themeUrl . '/assets/owo/QQ/' . str_replace('%', '', urlencode($match[1])) . '.gif" alt="QQ"/>'; }, $text );{/hide}{/tabs-pane}{/tabs}这里有一个坑 ，因为原作者引用表情包地址是用的 urlencode() 函数，将文字转换为UrlEncode编码的字符{hide}所以图片地址应该为不带 % 的UrlEncode，因此可以在站长工具 UrlEncode编码/UrlDecode解码 中将图片list.txt的文字转码为UrlEncode字符串然后再复制到Excel中将 % 替换为 空值 ，就像这样虽然转码完成了，但是还要把图片名称都换成不带 % 的UrlEncode才行如果你是Windows系统就很简单了（Mac的同学自行百度批量修改文件名），同样是在Excel中进行拼串="ren "&A3&".gif "&C3&".gif"得到结果后，首先在表情包文件夹中创建一个 red.txt 文件，然后将得到的结果粘贴到txt文件中保存最后将 red.txt 改为 red.bat ，再双击运行，你就会看到你的图片被批量重命名了 {/hide}二、配置 OwO.json打开 Joe/assets/json 下的 joe.owo.json 文件在里面添加（请自行删除代码中的 删除 字符） "表情": [ { "icon": "assets/owo/QQ/E788B1E4BDA0.gif", "data": ":删除$(爱你)" }, { "icon": "assets/owo/QQ/E788B1E5BF83.gif", "data": ":删除$(爱心)" }, { "icon": "assets/owo/QQ/E582B2E685A2.gif", "d…

『原创』『教程』搭建在线VSCode，部署Code-Server并配置反向代理实现域名访问
type: item
date: 2021-11-26T12:00:00+08:00
description: 前言最近学习web开发，一边看视频一边练习，码代码、记笔记，实属有些不亦乐乎但是无奈本子配置不高，每次同时打开vscode+Chrome，本子风扇呼呼作响不说，手里还像捧着个暖宝宝，实在不快突然想起之前看到过的开源vscode—— code-server ，索性自己也来搭建一个web版的vscode成果展示教程开始一、下载code-server源代码其实codeserver有很多种安装方式，但是我这里使用的是通过宝塔进行本地安装Docker安装虽然简单，但是后期维护和修改会很难受，所有我就采用本地安装吧{card-default label="下载code-server源码" width=""}官方github下载： code-server 国内镜像下载： code-server 3.12.0-linux-amd64.tar.gz code-server-4.1.0-linux-amd64.tar.gz code-server-4.1.0-linux-arm64.tar.gz code-server-4.1.0-macos-amd64.tar.gz {/card-default}二、运行code-server1、上传下载的文件到服务器直接将下载好的文件上传到自己的服务器，当然你也可以先使用宝塔添加一个网站然后上传到该网站对应的目录下2、解压文件3、运行code-server直接在解压的文件夹内点击终端进入终端然后在终端输入以下代码直接启动./bin/code-server --host 0.0.0.0 --port 8080如图所示就是已经完成配置.进入浏览器，输入服务器公网ip，加上刚才我们指定的端口号进入,显示欢迎界面输入密码进入4、修改密码在第一次开启code-server时，会在服务器 根目录-root-.config-code-server下生成一个配置文件打开后可以修改 host:端口 和 密码 ，这里建议把host改为 0.0.0.0 以能够使用外网访问如果不想使用密码，在 启动命令 中加 --auth none 即可无需密码进入。成功访问。到这里，我们就基本完成了 code-server 的部署。存在的问题虽然我们已成功部署了 code-server 服务，但有几个问题仍然不可避免！我们使用 终端 连接的方式启动 code-server，一旦断开连接，那么 code-server 就不可以再使用了code-server 自签的证书被浏览器提示不安全域名 + 端口的访问方式实在是太麻烦，而且还会暴露端口，不安全优化 code-server 服务一、问题11、创建开启脚本直接在code-server同目录下创建一个 start.sh 文件，打开将以下代码复制进去{hide}export PASSWORD="123456" #端口可以自己指定，其他不改，后台运行 nohup ./bin/code-server --port 8080 --host 0.0.0.0 --auth password > run.log 2>&1 & echo $! > save_pid.txt{/hide}2、创建关闭脚本创建一个 stop.sh 文件，将以下代码复制进去kill -9 'cat save_pid.txt' # 关闭这个进程，关闭code-server服务这样一来我们就得到了开启和关闭的脚本文件3、启动开启脚本在同目录文件夹下打开终端输入以下代码，就可以直接启动code-server并保持后台./start.sh启动后不会有反馈，可以直接关闭当前终端，然后会发现同目录下生成了 run.log 文件打开 run.log 即可看到运行日志二、问题2{callout color="#38bdff"}必须先添加 SSL 证书，然后设置反向代理{/callout}该步骤结合第三步，先添加一个站点，设置好域名，不需要任何环境，php 版本设置为纯静态，然后在面板的 SSL 中申请 Let’s Encrypt 免费 SSL 证书即可。三、问题3这里我们改变默认端口进行访问，并且使用 Nginx 反向代理修改端口：我们可以选择合适的端口开启 code-server，如: ./code-server --port 288651、创建反向代理点击刚才在宝塔 添加的网站-反向代理-添加反向代理 输入你的 代理名称、目标URL {callout color="#f0ad4e"}代理名称：code-server（随便填）目标URL：你的外网IP:端口{/callout}此时你就可以直接使用你的域名进行访问了，但是可能会报错 Error: WebSocket close with status code 1006 别急，这是正常现象，因为你的Ngin…

『修复』『插件』Typecho文章内容分页插件修复版（适配Joe编辑器）
type: item
date: 2021-11-18T19:46:00+08:00
description: 前言最近在学习web开发，每天跟着教学视频学习，我觉得每一个都是重点，所以有很多学习笔记我将学习笔记放在了自己的博客，一是为了记录自己学习内容，二是为了复习方便但是最近学习DOM的时候，发现有很多要点，而我又不想将其分篇来写，所以导致一篇文章有很多内容内容一多，阅读的时候就很不方便，因为滚动条变小了，而且一直翻不到底也很容易让人放弃所以我就去寻找有没有将文章分页的方法，好不容易找到一个方法，但无奈自己才疏学浅无法将其应用到typecho上来只好退而求其次，寻找有么有现成的方法或者插件，功夫不负有心人，终于还是让我找到了一款插件但是版本很老，是2010年的一款插件，已经不支持typecho1.1了索性到google去找找，没想到意外发现了一位大佬修复了兼容1.1的问题可是由于版本较早，且当年互联网的技术和审美不如现在，所以虽然能用也还是存在一些小问题，比如支持第三方编辑器时，快捷插入键失效且显示在页面底部于是自己动手修复了一下，并对样式进行了一些修改，虽不够完美，但起码适配当前主题成果展示{tabs}{tabs-pane label="前端展示"}{/tabs-pane}{tabs-pane label="编辑器展示"}{/tabs-pane}{/tabs}插件下载本插件主要适配Joe主题，如其他主题需要使用，可以自行修改博主也可以提供一些小的技术支持，喜欢的话不妨打赏博主，万分感谢！

『笔记』JavaScript基础学习笔记 5 — DOM（文本对象模型）
type: item
date: 2021-11-16T16:02:00+08:00
description: DOM（文档对象模型）1、DOM的简介（1）什么是DOM：DOM：文档对象模型（Document Object Model） （2）模型：（3）节点：节点的类型节点的属性例： 我是一个按钮 （4）事件（Event）事件：就是用户和浏览器之间的交互行为可以在事件对应的属性中设置一些js代码，当事件被触发时，这些代码将会执行onclick 点击一次、ondblclick点击两次可以为按钮的对应事件绑定处理函数的形式来响应事件，这样当事件被触发时，其对应的函数将会被调用 <!-- 我是一个按钮 --> 我是一个按钮 （5）文档的加载浏览器在加载一个页面时，是按照自上向下的顺序加载的，读取到一行就运行一行将js代码编写到页面的下部是为了可以在页面加载完毕后再执行js代码onload事件会在整个页面加载完毕后才触发可以为window绑定一个onload事件，可以确保代码执行时所有的DOM对象都已经加载完毕了 点我一下 2、DOM查询（1）获取元素节点window.onload = function(){ //为id为btn01的按钮绑定一个单击响应函数 var btn01 = document.getElementById("btn01"); btn01.onclick = function(){ var bj = document.getElenmentById("bj"); //打印bj //innerHTML 通过这个属性可以获取到元素内部的html代码 alert(bj.innerHTML); }; //为id为btn01的按钮绑定一个单击响应函数 var btn02 = document.getElementById("btn02"); btn02.onclick = function(){ //查找所以li节点 //getElementsByTagName()可以根据标签名来获取一组元素节点对象 //这个方法会返回一个类数组对象，所有查询到的元素都会封装到对象中 //即使查询到的元素只有一个也会封装到一个对象中 var lis = document.getElenmentsByTagName("li"); //打印lis //alert(lis); //变量lis for(var i=0; i<lis.length; i++){ alert(lis[i].innerHTML); } }; //为id为btn03的按钮绑定一个单击响应函数 var btn03 = document.getElementById("btn03"); btn03.onclick = function(){ //查找name=gender的所有节点 var inputs = document.getElenmentsByNmae("gender"); //alert(inputs.length); for(var i=0; i<inputs.length; i++){ //对于自结束标签，innerHTML无效 //alert(inputs[i].innerHTML); //如果需要读取元素节点属性直接使用：元素.属性名 //class属性不能采用这种方式，读取class属性时需要使用：元素.className alert(inputs[i].value); alert(inputs[i].name); alert(inputs[i].className); } }; };（2）图片切换的练习 <mata charset="UTF-8"> 上一张 下一张 （3）获取元素节点的子节点window.onload = function(){ //为id为btn04的按钮绑定一个单击响应函数 var btn04 = document.getElementById("btn04"); btn04.onclick = function(){ //获取id为city的元素 var city = document.getElementById("city"); //查找#city下所有的li节点 var lis = city.getElementsByTagName("li"); for(var i=0; i<lis.length; i++){ alert(lis[i].innerHTML); } }; //为id为btn05的按钮绑定一个单击响应函数 var btn05 = document.getElementById("btn05"); btn05.onclick = function(){ //返回id为city的节点 var city = document.getElementById("city"); //返回#city下所有子节点 //childNod…

『转载』『教程』Joe主题实现评论图片功能
type: item
date: 2021-10-23T11:33:00+08:00
description: 前言前几天在执念博客看到的功能，觉得有点用，就扒过来做个备份成品效果{tabs}{tabs-pane label="前台界面"}{/tabs-pane}{tabs-pane label="主题开关"}{/tabs-pane}{/tabs}修改教程一、修改 comment.php 文件修改 Joe/public/comment.php ，修改如下代码：{tabs}{tabs-pane label="代码"}{hide} <?php if ($this->options->CommentImg !== "off") : ?> <path d="M740.693333 750.933333h-102.4c-20.48 0-34.133333-13.653333-34.133333-34.133333s13.653333-34.133333 34.133333-34.133333h102.4c58.026667 0 102.4-44.373333 102.4-102.4 0-47.786667-34.133333-88.746667-78.506666-98.986667-17.066667-3.413333-27.306667-20.48-27.306667-37.546667 3.413333-13.653333 3.413333-23.893333 3.413333-34.133333 0-112.64-92.16-204.8-204.8-204.8-88.746667 0-170.666667 61.44-197.973333 146.773333 0 13.653333-13.653333 23.893333-27.306667 23.893334-81.92 3.413333-146.773333 71.68-146.773333 153.6 0 85.333333 68.266667 153.6 153.6 153.6h51.2c20.48 0 34.133333 13.653333 34.133333 34.133333s-13.653333 34.133333-34.133333 34.133333H314.026667c-122.88 0-221.866667-98.986667-221.866667-221.866666 0-112.64 81.92-204.8 191.146667-218.453334 40.96-102.4 143.36-174.08 252.586666-174.08 150.186667 0 273.066667 122.88 273.066667 273.066667v13.653333c61.44 27.306667 102.4 88.746667 102.4 157.013334 0 95.573333-75.093333 170.666667-170.666667 170.666666z m-204.8 102.4V477.866667c0-13.653333-6.826667-23.893333-20.48-30.72-10.24-6.826667-23.893333-3.413333-34.133333 3.413333l-136.533333 102.4c-13.653333 10.24-17.066667 34.133333-6.826667 47.786667 10.24 13.653333 34.133333 17.066667 47.786667 6.826666l81.92-61.44v307.2c0 20.48 13.653333 34.133333 34.133333 34.133334s34.133333-13.653333 34.133333-34.133334z m129.706667-252.586666c10.24-13.653333 6.826667-37.546667-6.826667-47.786667l-34.133333-27.306667c-13.653333-10.24-37.546667-6.826667-47.786667 6.826667-10.24 13.653333-6.826667 37.546667 6.826667 47.786667l34.133333 27.306666c6.826667 3.413333 13.653333 6.826667 20.48 6.826667 10.24 0 20.48-3.413333 27.306667-13.653333z" fill="var(--theme)" p-id="2083"></path> <path d="M897.23 333.08H657.88V122.51c0…

『原创』『教程』首页及文章页滚动广告栏
type: item
date: 2021-10-15T12:08:00+08:00
description: 前言因为之前在很多网站上都能看到广告，虽然但是，这对很多博主来说也是一笔额外的收入，我一直是入不敷出！:@(吐血倒地) 然后我看到了执念博客的首页广告栏，虽然曝光确实大，但是用户体验极其不好，因为要翻很多广告才能翻到文章，就像这样：所以我就想到了滚动广告，一个广告的位置，能够显示多条广告成果展示{tabs}{tabs-pane label="首页"}{/tabs-pane}{tabs-pane label="文章页"}{/tabs-pane}{/tabs}教程开始灵感及相关代码来自于Joe主题的首页轮播图一、添加后台打开 functions.php 添加以下代码{tabs}{tabs-pane label="代码"}$JADPost = new Typecho_Widget_Helper_Form_Element_Textarea( 'JADPost', NULL, NULL, '文章页顶部广告', '介绍：用于设置文章页顶部广告 格式：广告图片 || 跳转链接 （中间使用两个竖杠分隔） 注意：如果您只想显示图片不想跳转，可填写：广告图片 || javascript:void(0) 其他：一行一个，一行代表一个轮播广告图' ); $JADPost->setAttribute('class', 'joe_content joe_post'); $form->addInput($JADPost);{/tabs-pane}{tabs-pane label="代码位置"}因为有位小伙伴放错了位置，所以再贴一张图{/tabs-pane}{/tabs}这是文章页的代码，因为首页广告主题自带了二、添加滚动广告栏{tabs}{tabs-pane label="首页"} 因为首页已经有广告位了，所以直接替换就行了将主题 index.php 的以下代码直接替换为新代码{collapse}{collapse-item label="代码位置" open}{/collapse-item}{collapse-item label="新代码" open}{hide} <?php $index_ad = []; $index_ad_text = $this->options->JIndex_Ad; if ($index_ad_text) { $index_ad_arr = explode("\r\n", $index_ad_text); if (count($index_ad_arr) > 0) { for ($i = 0; $i < count($index_ad_arr); $i++) { $img = explode("||", $index_ad_arr[$i])[0]; $url = explode("||", $index_ad_arr[$i])[1]; $index_ad[] = array("img" => trim($img), "url" => trim($url)); }; } } ?> <?php if (sizeof($index_ad) > 0) : ?> <?php foreach ($index_ad as $item) : ?> <a class="item" href="<?php echo $item['url'] ?>" target="_blank" rel="noopener noreferrer nofollow"> <img width="100%" class="image lazyload" src="<?php _getLazyload() ?>" data-src="<?php echo $item['img'] ?>" /> <?php endforeach; ?> 广告 <?php endif; ?> {/hide}{/collapse-item}{/collapse}{/tabs-pane}{tabs-pane label="文章页"}文章页直接在主题的 post.php 文件内合适的地方加入以下代码{collapse}{collapse-item label="代码位置" open}{/collapse-item}{collapse-item label="代码" open}{hide} <?php $JADPost = []; $JADPost_text = $this->options->JADPost; if ($JADPost_text) { $JADPost_arr = explode("\r\n", $JADPost_text); if (count($JADPost_arr) > 0) { for ($i = 0; $i < count($JADPost_arr); $i++) …