首页
关于
留言
统计
更多
友联
壁纸
图床
Search
1
下次见面又是什么时候呢
814 阅读
2
joe主题优化记录(更新中)
551 阅读
3
在线网页体重记录表
541 阅读
4
小程序npn构建
463 阅读
5
和他
437 阅读
Search
标签搜索
日常
joe
js
php
window
编程知识
小程序
html
Blank
累计撰写
23
篇文章
累计收到
10
条评论
首页
栏目
日常记录
微言微语
风景分享
生活知识
电脑知识
编程知识
办公技巧
node
最新文章
页面
关于
留言
统计
友联
壁纸
图床
搜索到
11
篇与
编程知识
的结果
在线网页体重记录表
前言代码在小程序端展示会异常需要的请移步网址 uurr.cn 获取 ::(灯泡)效果简介在本文中,我们将介绍一个简单的体重记录表的网页代码示例。该代码能够实现以下功能:用户可以输入体重数据和密码。输入正确密码后,将数据以时间戳的形式写入到文件中。读取已保存的体重数据,并生成体重变化折线图。显示体重数据的记录表,包括日期、体重和与上次体重的差值。代码功能详解体重数据提交和密码校验代码首先检查用户是否提交了体重数据,并验证密码是否正确。只有密码正确时才允许提交体重数据,否则会提示密码错误。体重数据处理如果存在本地文件 "weights.csv",代码会读取其中的体重数据,并生成折线图。同时,会计算体重数据间的差值,并标注在记录表中,用不同颜色表示增减情况。生成折线图 利用Plotly.js库绘制折线图,展示体重变化趋势。每个数据点上将显示具体的体重数值。记录表展示 在记录表中展示体重数据,包括第N天、日期、体重以及与上一次体重的差值。差值会根据正负情况以不同颜色标识,并保留两位小数。代码 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>体重记录表</title> <!-- 引入 Plotly.js 用于绘制折线图 --> <script src="https://www.w3school.com.cn/lib/graphics/plotly.js"></script> <style> body { font-family: Arial, sans-serif; margin: 20px; color: #333; } h2 { color: #333; text-align: center; } form { margin-bottom: 20px; } input[type="text"] { padding: 10px; width: calc(100% - 20px); margin-bottom: 10px; } input[type="submit"] { padding: 10px; background-color: #4CAF50; color: white; border: none; border-radius: 4px; cursor: pointer; width: 100%; } input[type="submit"]:hover { background-color: #45a049; } #chart { margin-bottom: 20px; width: 100%; } @media screen and (max-width: 759px) { /* 在屏幕宽度大于760像素时应用以下样式 */ #chart { height: 260px; } } table { border-collapse: collapse; width: 100%; } th, td { border: 1px solid #ddd; padding: 10px; text-align: center; } th { background-color: #f2f2f2; } </style> </head> <body> <?php // 检查是否有体重数据提交 if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["weight"])) { $weight = $_POST["weight"]; $paw = $_POST["paw"]; // 检查密码是否正确 if($paw != "gtt") { echo "密码错误,请重新输入。密码是你的名字拼音小写"; exit; // 停止执行后续代码 } // 生成当前时间戳 $timestamp = date("Y-m-d H:i:s"); // 将数据写入本地文件 $file = fopen("weights.csv", "a"); fwrite($file, "$timestamp,$weight\n"); fclose($file); // 提交成功后进行重定向 header('Location: index.php'); } else { // 读取体重数据并生成折线图 // 检查文件是否存在 if (file_exists("weights.csv")) { $weights = []; $timestamps = []; $file = fopen("weights.csv", "r"); while (!feof($file)) { $line = fgets($file); $data = explode(",", $line); if (count($data) == 2) { $timestamps[] = $data[0]; $weights[] = $data[1]; } } fclose($file); // 检查是否有体重数据,如果有则生成折线图的JavaScript代码 if (!empty($weights)) { // 计算日期差 $prev_date = date('Y-m-d', strtotime($timestamps[0])); $start_date = strtotime($prev_date); $table_data = []; for ($i = 0; $i < count($weights); $i++) { $curr_date = date('Y-m-d', strtotime($timestamps[$i])); if ($curr_date != $prev_date) { $date_diff++; $prev_date = $curr_date; } $table_data[] = [ 'day' => $date_diff + 1, // 加1修正为第一天 'date' => $timestamps[$i], 'weight' => $weights[$i] ]; // 判断差值 for ($j = 1; $j < count($table_data); $j++) { $prev_weight = $table_data[$j - 1]['weight']; $curr_weight = $table_data[$j]['weight']; $weight_diff = $curr_weight - $prev_weight; $weight_diff = number_format($weight_diff, 2); // 保留两位小数 $table_data[$j]['weight_diff'] = $weight_diff; // 标记颜色 if ($weight_diff < 0) { $table_data[$j]['color'] = 'green'; } elseif ($weight_diff > 0) { $weight_diff = '+' . $weight_diff; $table_data[$j]['color'] = 'red'; } } } echo '<div id="chart"></div><div id="chart_"></div>'; echo '<script>'; echo 'var trace = {'; echo ' x: [' . implode(',', array_map('json_encode', array_column($table_data, 'date'))) . '],'; echo ' y: [' . implode(',', array_column($table_data, 'weight')) . '],'; echo ' type: "scatter"'; echo '};'; echo 'var layout = {'; echo ' title: "体重变化图",'; echo ' xaxis: {'; echo ' title: ""'; echo ' },'; echo ' yaxis: {'; echo ' title: ""'; echo ' },'; echo ' margin: {'; echo ' l: 40,'; echo ' r: 40,'; echo ' t: 40,'; echo ' b: 40'; echo ' },'; echo ' hovermode: false,'; echo ' modebar: {'; echo ' displayModeBar: false'; echo ' }'; echo '};'; echo 'Plotly.newPlot("chart", [trace], layout, { displayModeBar: false, responsive: true, staticPlot: true, });'; echo '</script>'; echo '</div>'; } } else { echo "暂无体重数据。"; } ?> <form method="post" action="index.php"> <input type="text" autocomplete="off" id="weight" name="weight" placeholder="请输入当前体重(kg*2)" required><br> <input type="text" autocomplete="off" id="paw" name="paw" placeholder="请输入当前密码哦 (paw)" required><br> <input type="submit" value="提交"> </form> <?php // 输出表格 echo '<h3>体重记录</h3>'; echo '<table>'; echo '<tr><th>第N天</th><th>日期</th><th>体重(wg)</th><th>差值</th></tr>'; // 检查 $table_data 是否为空 if (!empty($table_data)) { rsort($table_data); foreach ($table_data as $data) { $weight_diff = isset($data['weight_diff']) ? $data['weight_diff'] : ''; $color = isset($data['color']) ? $data['color'] : ''; if ($weight_diff == "") { $weight_diff = '0.00' ; } elseif ($weight_diff < 0) { } elseif ($weight_diff > 0) { $weight_diff = '+' . $weight_diff; } // 根据颜色设置样式 $style = ''; if ($color) { $style = 'style="color: ' . $color . ';"'; } echo '<tr><td>' . $data['day'] . '</td><td>' . $data['date'] . '</td><td>' . $data['weight'] . '</td><td ' . $style . '>' . $weight_diff . '</td></tr>'; } } else { echo '<tr><td colspan="4">暂无体重数据。</td></tr>'; } echo '</table>'; } // 在顶部显示数值 function addAnnotations($data) { $annotations = []; for ($i = 0; $i < count($data['x']); $i++) { $annotation = array( 'x' => $data['x'][$i], 'y' => $data['y'][$i], 'text' => number_format($data['y'][$i], 2), // 显示数值,保留两位小数 'xref' => 'x', 'yref' => 'y', 'showarrow' => true, 'arrowhead' => 0, 'ax' => 0, 'ay' => -30 ); $annotations[] = $annotation; } return $annotations; } ?> </body> </html>
2024年04月21日
541 阅读
0 评论
2 点赞
joe主题优化记录(更新中)
一. 评论打卡/夸夸在主题的 themes/Joe/public/comment.php 中找到 <div class="owo joe_owo__contain"></div> 这行代码,在其下面添加下面的代码html 代码: <div class="comment-clockIn" onclick="javascript:clockIn()">打卡</div> 然后在你的css中添加下列样式css 代码:/*评论打卡*/ .joe_comment__respond-form .foot { justify-content: flex-start!important } .comment-clockIn { text-align: center; color: #606266; height: 26px; line-height: 26px; background: rgba(255,255,255,0.7); opacity: .85; border-radius: 13px; width: 70px; margin-left: 5px; cursor: pointer }最后在把下列代码加入js中,即可完成js 代码:/*评论打卡*/ function clockIn() { let time = (new Date).toLocaleTimeString(); let clockInCon = '滴!贵宾卡!打卡时间:' + time + ',请上车的乘客系好安全带~'; $(".joe_owo__target").val(clockInCon); }/*评论夸夸*/ function clockIn() { const compliments = [ "你的才华真是无与伦比!", "这篇文章写得非常精彩,让人印象深刻。", "你总是能用最简单的方式表达复杂的思想。", "你的视角独特,给我带来了新的启发。", "你的工作总是如此高效,令人佩服。", "这段文字充满了智慧和深度。", "你对细节的关注让作品更加完美。", "你的创意真是令人惊叹,太有才了!", "谢谢你分享如此宝贵的知识。", "你的努力和坚持令人感动。", "这篇文章让我对这个话题有了全新的理解。", "你的思维方式深具启发性,让我大开眼界。", "你在写作中展现出的热情感染了我。", "每次阅读你的作品,我都能学到新东西。", "你的表达能力非常出色,令人钦佩。", "这段论述逻辑严谨,分析透彻。", "你的人生经历丰富多彩,非常令人向往。", "你的幽默感真是让人开心!", "每一句话都展现了你深厚的知识储备。", "你总能把复杂的事情讲得如此简单易懂。", "这篇文章的结构设计得很巧妙,流畅自然。", "你的想法非常前卫,值得深入探讨。", "这段文字的情感表达非常真诚。", "你在文中提出的观点非常有洞察力。", "你的表现超出了我的预期,太棒了!", "你对主题的理解让人叹服。", "这篇文章的每个细节都体现了你的用心。", "你的作品总能引发我深入思考。", "这段论述让我对未来充满希望。", "你的写作风格独具魅力,令人陶醉。", "你用生动的语言描绘了一个美好的画面。", "你的激情和热忱令人鼓舞。", "这篇文章让人感觉温暖而亲切。", "你的批判性思维真是令人敬佩。", "这段文字让我感受到深厚的人文关怀。", "你总是能够触及事物的本质。", "这篇文章的主题选择非常契合时宜。", "你的见解让我重新思考自己的观点。", "每一次阅读都像是一次新的发现。", "你的文字散发着智慧的光芒。", "这段话让我对生活有了新的思考。", "你的写作总能让我感受到强烈的情感。", "这篇文章的内容让我感到振奋。", "你在文中使用的比喻非常生动形象。", "这段论述层次分明,让人易于理解。", "你的观察力真让人佩服!", "这篇文章是一场思维的盛宴。", "你将个人经验与理论结合得很好。", "这段文字的情感流露非常自然。", "你的文字总能触动我的内心。", "这篇文章的内容丰富且耐人寻味。", "你对话题的深刻理解让我感到敬佩。", "这段话的感染力非常强,令人印象深刻。", "你的写作技巧真是让人赞叹不已。", "这篇文章的主题非常贴近生活,真实感人。", "你的思维方式让我大开眼界,充满启发。", "这段话让我感受到深刻的哲理。", "你的文章总是那么引人入胜,令人期待。", "这篇文章的结论非常有力,令人信服。", "你的表达能力让人印象深刻,真是优秀!", "这段文字的情感流露非常自然。", "你的作品总是能让我感受到温暖和希望。", "这篇文章的例证恰到好处,增强了说服力。", "你在写作中展现出的深厚的文化底蕴真让人佩服。", "这段文字激励了我,让我充满动力。", "你对事物的敏锐观察让我敬佩。", "这篇文章是对我思维的极大挑战,感谢!", "你的作品总能引导我思考人生的意义。", "这段话的逻辑性和条理性令人赞赏。", "你的写作总是如此真诚,打动人心。", "这篇文章的内容让我倍感温暖。", "你的写作风格让人感受到一种亲切感。", "这段文字以生动的方式传达了复杂的情感。", "你的努力和坚持真是令人钦佩,继续加油!", "这篇文章的每个部分都展现了你的才华与智慧。" ]; const randomIndex = Math.floor(Math.random() * compliments.length); const randomCompliment = compliments[randomIndex]; $(".joe_owo__target").val(randomCompliment); $(".joe_owo__target").val(clockInCon); }二. 首页导航栏美化找了网上好多教程,好少关于joe导航栏美化的知识,今天自己琢磨了一下,参考了网上一些教程 ::(玫瑰) 效果图:首先我们需要打开网站阿里云的icon资源站 https://www.iconfont.cn ,将自己的资源导入到joe后台的自定义head中然后找到joe根目录的Joe/public/header.php文件,大概83-99行的位置,将以下文件放入至红色框框中即可,注意,需要将里面的icon换成自己的,还有页面$iconClassMap中的对应页面设置好,这个就是你后台 - 独立页面 - 缩略名修改前修改后<a class="item <?php echo $this->is('index') ? 'active' : '' ?>" href="<?php $this->options->siteUrl(); ?>" title="首页"> <svg class="joeicon" aria-hidden="true"> <use xlink:href="#icon-EC_wendang-tiyuyule"></use> </svg> 首页 </a> <?php $this->widget('Widget_Contents_Page_List')->to($pages); ?> <?php if (count($pages->stack) <= $this->options->JNavMaxNum) : ?> <?php foreach (array_slice($pages->stack, 0, $this->options->JNavMaxNum) as $item) : ?> <?php $iconClassMap = [ 'start-page' => 'icon-zhongduan', '3' => 'icon-liuyanmoban', '4' => 'icon-MBEfenggeduosetubiao-fasong', //你的页面名和对应的图标 ]; $iconClass = isset($iconClassMap[$item['slug']]) ? $iconClassMap[$item['slug']] : ''; ?> <a class="item <?php echo $this->is('page', $item['slug']) ? 'active' : '' ?>" href="<?php echo $item['permalink'] ?>" title="<?php echo $item['title'] ?>"> <?php if ($iconClass !== '') : ?> <svg class="joeicon" aria-hidden="true"> <use xlink:href="#<?php echo $iconClass ?>"></use> </svg> <?php endif; ?> <?php echo $item['title'] ?> </a> <?php endforeach; ?> <?php else : ?> <?php foreach (array_slice($pages->stack, 0, $this->options->JNavMaxNum) as $item) : ?> <?php $iconClassMap = [ 'start-page' => 'icon-zhongduan', '3' => 'icon-liuyanmoban', '4' => 'icon-MBEfenggeduosetubiao-fasong', //你的页面名和对应的图标 ]; $iconClass = isset($iconClassMap[$item['slug']]) ? $iconClassMap[$item['slug']] : ''; ?> <a class="item <?php echo $this->is('page', $item['slug']) ? 'active' : '' ?>" href="<?php echo $item['permalink'] ?>" title="<?php echo $item['title'] ?>"> <?php if ($iconClass !== '') : ?> <svg class="joeicon" aria-hidden="true"> <use xlink:href="#<?php echo $iconClass ?>"></use> </svg> <?php endif; ?> <?php echo $item['title'] ?> </a> <?php endforeach; ?> <div class="joe_dropdown" trigger="hover" placement="60px" style="margin-right: 15px;"> <div class="joe_dropdown__link"> <svg class="joeicon" aria-hidden="true"> <use xlink:href="#icon-dianzan"></use> </svg> <a href="#" rel="nofollow">更多</a> <svg class="joe_dropdown__link-icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" width="14" height="14"> <path d="M561.873 725.165c-11.262 11.262-26.545 21.72-41.025 18.502-14.479 2.413-28.154-8.849-39.415-18.502L133.129 375.252c-17.697-17.696-17.697-46.655 0-64.352s46.655-17.696 64.351 0l324.173 333.021 324.977-333.02c17.696-17.697 46.655-17.697 64.351 0s17.697 46.655 0 64.351L561.873 725.165z" p-id="3535" fill="var(--main)"></path> </svg> </div>最后还需要将css代码放入joe后台的自定义css中,可以根据需要修改.joeicon { width: 20px; height: 20px; vertical-align: -.15em; fill: currentColor; overflow: hidden; }三. CSS美化在后台Joe/assets/css/joe.global.min.css中1. 顶部导航栏固定 将joe_header.active{top:-60px}删除或者设置为0即可2. 顶部导航栏高斯模糊效果图:首先需要将背景颜色取消,然后在后台自定义css中加入一下css代码@media screen and (min-width: 759px) { /* 在屏幕宽度大于760像素时应用以下样式 */ .joe_header{backdrop-filter: saturate(5) blur(20px);} }四.添加侧边目录转载的网络上的,自己修改了一点编辑joe/public/aside.php文件,这个文件包含了所有侧边栏组件,在博主栏和人生倒计时中间插入下面这段代码 <?php if (($this->is('post') || $this->is('page'))) : ?> <section class="joe_aside__item catalogue"> <div class="joe_aside__item-title"> <svg class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="2084" width="18" height="18"><path d="M640 192H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h416c17.7 0 32 14.3 32 32s-14.3 32-32 32zM960 544H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h736c17.7 0 32 14.3 32 32s-14.3 32-32 32zM640 896H224c-17.7 0-32-14.3-32-32s14.3-32 32-32h416c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 192H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 544H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32zM96 896H64c-17.7 0-32-14.3-32-32s14.3-32 32-32h32c17.7 0 32 14.3 32 32s-14.3 32-32 32z" p-id="2085"></path></svg> <span class="text">导航目录</span> </div> <div class="joe_aside__item-contain"> <ul class="catalogue-items"> </ul> </div> </section> <?php endif; ?>接下来修改joe\assets\js\joe.post_page.min.js文件,在文件开头的第一个大括号后面添加下面这段代码function get_catalogs(article_content) { let titles = []; let diffLevel = 0; const titleTag = ["H1", "H2", "H3", "H4", "H5", "H6"]; // Filter out non-element nodes const elements = Array.from(article_content.children); elements.forEach((e, index) => { const nodeName = e.nodeName; if (titleTag.includes(nodeName)) { const level = parseInt(nodeName.substring(1, 2), 10) - diffLevel; titles.push({ id: "header-" + index, text: e.textContent, level: level }); e.id = "header-" + index; } }); return titles; } article_content = document.querySelector('.joe_detail__article'); if (article_content) { var catalog = get_catalogs(article_content); if (catalog.length == 0) { $('.catalogue').hide() } else { let asideArr = ['timelife', 'today', 'hot', 'newreply', 'weather', 'tags', 'flatterer']; asideArr.forEach(item => $('.joe_aside__item.' + item).remove()); let catalogue = ''; for (let i = 0; i < catalog.length; i++) { let node = '<li class="catalogue-item">' + '<a id="to-' + catalog[i].id + '" title="' + catalog[i].text + '" href="#' + catalog[i].id + '">' + '<span class="dir_name">' + catalog[i].text + '</span>' + '</a>' + '</li>'; if (i == catalog.length - 1) { catalogue += node + '</li>' } else { if (catalog[i + 1].level == catalog[i].level) { catalogue += node + '</li>' } else if (catalog[i + 1].level > catalog[i].level) { catalogue += (catalog[i + 1].level > 1) ? node + '<ul class="level-' + catalog[i + 1].level + '">' : node + '</li>' } else { if (catalog[i + 1].level - catalog[i].level == -2) { catalogue += i > 1 ? node + '</li></ul></li></ul></li>' : node + '</li></ul></li>' } else { catalogue += i > 1 ? node + '</li></ul></li>' : node + '</li>' } } } } document.querySelector('.catalogue-items').innerHTML = catalogue; $('.catalogue-item > a').on('mouseenter', function() { $(this).parent().addClass('_active') }); $('.catalogue-item > a').on('mouseleave', function() { $(this).parent().removeClass('_active') }); $('.catalogue-item > a').on('click', function() { document.removeEventListener("scroll", autoActive); $('.catalogue-item').removeClass('active'); $(this).parent().addClass('active'); let aim = document.querySelector('#' + $(this).attr('to')); let aim_top = aim.offsetTop; let aim_h = aim.clientHeight; let above_h = document.querySelector('.joe_header__above').clientHeight; let below_h = document.querySelector('.joe_header__below').clientHeight; let offset = 0; let case1 = !document.querySelector('.joe_header__above').className.includes('active'); let case2 = document.getElementsByTagName("html")[0].scrollTop + above_h > aim_top; if (case1 && case2) { offset = above_h } window.scrollTo({ top: aim_top - offset - below_h - 10, behavior: 'smooth' }); setTimeout(() => { document.addEventListener("scroll", autoActive) }, 500) }); if (catalog.length) $('.catalogue-item').eq(0).addClass('active'); let autoActive = function() { let html_top = document.getElementsByTagName("html")[0].scrollTop; let contain = $(".joe_aside__item.catalogue .joe_aside__item-contain"); for (let i = 0; i < catalog.length; i++) { let offset = 0; let h_id = '#' + catalog[i].id; let h_offset = document.querySelector(h_id).offsetTop; let above_h = document.querySelector('.joe_header__above').clientHeight; let below_h = document.querySelector('.joe_header__below').clientHeight; if (!document.querySelector('.joe_header').className.includes('active')) offset = above_h; if (h_offset + below_h + offset + 10 >= html_top) { $('.catalogue-item').removeClass('active'); if (i > 0 && i < catalog.length - 1 && document.querySelector('#' + catalog[i].id).offsetTop > html_top + window.innerHeight * 0.2) { i-- } $('#to-' + catalog[i].id).parent().addClass('active'); break } } }; document.addEventListener("scroll", autoActive) } } else { $('.catalogue').hide() }后面就是样式问题了,接下来修改joe\assets\css\joe.post.min.css在文件末尾添加下面这段CSS .joe_aside__item.catalogue{margin-bottom:15px;transition:top 0.35s;background:var(--background)} .joe_aside__item.catalogue .joe_aside__item-contain{padding:0;margin:0;margin-left:10px;max-height:500px;overflow-y:auto} .joe_aside__item.catalogue .joe_aside__item-contain::-webkit-scrollbar{width:3px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items{border-left:2px solid var(--classC);padding:10px 15px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item{margin:0;padding:0;line-height:26px;font-size:15px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a{position:relative;display:block;line-height:26px;color:var(--main);transition:color 0.5s} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a:hover{color:var(--theme)} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item._active>a,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item.active>a{color:var(--theme)} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item.active>a::before{content:"";position:absolute;left:-17px;top:0;width:2px;height:26px;background-color:var(--theme);transition:height 0.35s} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2>.catalogue-item,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item.active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item.active>a::before{left:-34px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-2 .catalogue-item .level-3 .catalogue-item.active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item._active>a::before,.joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3 .catalogue-item .level-3 .catalogue-item.active>a::before{left:-51px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item .level-3>.catalogue-item{font-size:14px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item ul{padding-left:17px} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items ul{display:block;list-style-type:disc} .joe_aside__item.catalogue .joe_aside__item-contain .catalogue-items .catalogue-item a span.dir_name{display:block;width:100%;overflow:hidden;white-space:nowrap;text-overflow:ellipsis} 五.侧边栏滑动位置这个的位置觉得太靠上可以改以下,滑动的时候位置 usr/themes/Joe/assets/js/joe.global.min.js ,-60的哪个表示往下滑的时候侧边栏与顶部距离,+15的表示上滑时侧边栏与顶部距离六.代码展示优化有时候代码太长反而影响用户阅读,所以我们可以将这个进行缩小,加个滚顶条即可,找到joe\assets\css\joe.global.min.css,搜索 .joe_detail__article pre[class*='language-'] ,然后把这个overflow:hidden改为 overflow-y: auto;后面加个max-height: 500px;自定义一下高度就可以了
2024年03月23日
551 阅读
0 评论
2 点赞
RSA加密示例
前言这是一种非对称式加密,很适合用在前端与后端的通信上它分为公钥和私钥,公钥仅可用于加密,私钥用于解密这样一来就可以将公钥发送给客户端,客户端拿着公钥加密后返回给服务器,服务器再使用私钥进行解密我小程序也采用了这种加密方式给需要的大佬借鉴一下首先是php端代码(后端或者服务器端),这里使用了base64_decode和url解码,因为我前端也进行了相应的编码教程我们需要先生成一个密钥在线RAS密钥生成:https://www.lddgo.net/encrypt/rsa // 解密 function Rsa_decrypts($data) { // 加载openssl扩展 if (!extension_loaded('openssl')) { die('OpenSSL 扩展未加载'); } // 密钥文件路径 $privateKeyFile = '改为自己路径private_key.pem'; $publicKeyFile = '改为自己路径public_key.pem'; // 加载私钥 $privateKeyResource = openssl_pkey_get_private(file_get_contents($privateKeyFile)); if ($privateKeyResource === false) { return '无法加载私钥'; } $data=urldecode($data); $data=base64_decode($data); $decryptedText = ''; if (openssl_private_decrypt(base64_decode($data), $decryptedText, $privateKeyResource, OPENSSL_PKCS1_PADDING) === false) { return ''; } return $decryptedText; } 然后我们开始在微信小程序安装一下相应的库选择小程序的调试器 —— 选择终端 —— 输入npm i wxmp-rsa -S进行安装安装完成后小程序目录里面会生成node_modules文件夹,里面会有wxmp-rsa文件夹安装完成后在编辑器左上角的菜单栏中找到工具 —— 构建npm完成后小程序文件目录会构建出miniprogram_npm文件夹,里面会有wxmp-rsa文件夹然后将你就可以开始使用了,下面是一个参考示例,同样这里我使用了Base64和url编码,./base64.js可以百度下载一个,如果不需要移除即可,这样就可以实现小程序与后端的加密通讯了,但是需要注意数据长度不能超过太长!否则将加密失败! // 导入包 import WxmpRsa from 'wxmp-rsa' const Base64 = require('./base64.js'); // 实例化rsa const rsa = new WxmpRsa() rsa.default_key_size = 512 const publicKey = "这里放公钥" // 加密 function encrypt(data) { if (typeof data != 'string') { data = data.toString() } if (data == '') { return '' } if (publicKey != "") { rsa.setPublicKey(publicKey) const cryptStr = rsa.encryptLong(data) var r = Base64.encode(cryptStr) var r = encodeURIComponent(r) return r } return '' } //暴露接口 module.exports = { encrypt, UPglobalData, }
2023年11月02日
229 阅读
0 评论
2 点赞
Android studio安装教程
Android studio安装:下载链接:http://www.android-studio.org/找到自己想要的版本:(或者直接点击上面的,默认是windows 64位)等待一段时间,下载完成后:点击安装包点击next;点击next;选择安装路径:点击Install安装;进度条完成后,点击next点击Finish完成(注意勾选start Android studio会启动程序)启动后:选择第二个,然后点击OK点击后会出现一个弹窗,两个都可以选,推荐选的Don‘t sen然后点击Cancel进入界面,点击next点击next选择你的布局颜色,选择完成后,点击next点击Finish,等待进度条完成点击finish完成文章转载于:https://blog.csdn.net/alzzw/article/details/102692135
2023年10月12日
339 阅读
0 评论
10 点赞
小程序npn构建
今天在开发微信小程序的时候想引入一下第三方的库一直提示:发生错误Error: D:\My_exe\微信小程序开发工具\project\miniprogram\ 未找到然后在网上找了好久才发现问题,新手真的是各种踩坑... ::(狂汗) 我这里使用的组件库是 Vant Weapp 首先在微信小程序终端输入: npm init ,之后一直回车就好了然后开始 npm 安装 npm i @vant/weapp -S --production 然后在你的项目中就会生成下面几个包,但是注意如果发现miniprogram_npm没有生成就需要查看一下project.config.json目录中的 "packNpmManually" ,是不是为true了,是的话将其改为false在npm一下应该就正常了然后继续按照官方教程走先修改 app.json将 app.json 中的 "style": "v2" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。修改 project.config.json开发者工具创建的项目,miniprogramRoot 默认为 miniprogram,package.json 在其外部,npm 构建无法正常工作。需要手动在 project.config.json 内添加如下配置,使开发者工具可以正确索引到 npm 依赖的位置。{ ... "setting": { ... "packNpmManually": true, "packNpmRelationList": [ { "packageJsonPath": "./package.json", "miniprogramNpmDistDir": "./miniprogram/" } ] } }注意: 由于目前新版开发者工具创建的小程序目录文件结构问题,npm构建的文件目录为miniprogram_npm,并且开发工具会默认在当前目录下创建miniprogram_npm的文件名,所以新版本的miniprogramNpmDistDir配置为'./'即可最后构建npn就好了,打开微信开发者工具,点击 工具 -> 构建 npm,并勾选 使用 npm 模块 选项,构建完成后,即可引入组件。
2023年10月10日
463 阅读
0 评论
4 点赞
1
2