作者: kukey-admin

  • js自定义html提示弹窗

    function alertTip(tipText){
    let customAlertDiv = document.getElementById('customAlert');
    var contentElement = customAlertDiv.querySelector('p');
    contentElement.textContent = tipText;
    customAlert.style.display = 'block';
    setTimeout(function() {
        customAlert.style.display = 'none';
    }, 1000);
    }

     

    <!-- 自定义提示弹窗的容器 -->
    <div id="customAlert">这是一段提示文本!</div>
    <style>
    /* 简单样式,用于美化提示弹窗 */
    #customAlert {
        display: none;
        position: fixed;
        top: 30%;
        left: 50%;
        transform: translateX(-50%);
        background-color: #f44336; /* 红色背景 */
        color: white;
        padding: 20px;
        z-index: 1000;
        border-radius: 5px;
        box-shadow: 0 4px 6px rgba(0,0,0,0.1);
        text-align: center;
    }
    </style>

    来自kimi的详细解释:

    这段代码定义了一个自定义的提示弹窗(通常称为模态框或对话框),包括HTML和CSS两个部分。下面是详细解释:

    HTML部分

    <!-- 自定义提示弹窗的容器 -->
    <div id="customAlert">这是一段提示文本!</div>

    这里定义了一个<div>元素,它用作提示弹窗的容器。这个<div>被赋予了一个ID customAlert,这个ID在后面的CSS和JavaScript中用来选择和操作这个元素。<div>中包含的文本”这是一段提示文本!”是弹窗显示的消息内容。

    CSS部分

    #customAlert {
        display: none;           /* 默认情况下弹窗不显示 */
        position: fixed;         /* 固定定位,相对于浏览器窗口定位 */
        top: 30%;                /* 垂直方向上距离窗口顶部30%的位置 */
        left: 50%;               /* 水平方向上距离窗口左侧50%的位置 */
        transform: translateX(-50%); /* 使用CSS的transform属性向左移动50%自身的宽度,实现水平居中 */
        background-color: #f44336; /* 弹窗的背景颜色为红色 */
        color: white;             /* 文字颜色为白色 */
        padding: 20px;            /* 内边距为20像素,增加点击区域和内容与边框的距离 */
        z-index: 1000;            /* 层级值为1000,确保弹窗显示在页面其他元素的上方 */
        border-radius: 5px;       /* 边框圆角为5像素,使弹窗边框看起来更平滑 */
        box-shadow: 0 4px 6px rgba(0,0,0,0.1); /* 阴影效果,增强立体感 */
        text-align: center;       /* 文本内容水平居中 */
    }

    CSS样式定义了#customAlert弹窗的外观和定位。使用了一些CSS3的特性,如transformbox-shadow,这些特性在现代浏览器中广泛支持,但在旧版IE中可能需要额外的polyfills或回退策略。

    工作原理

    • display: none; 确保在页面加载时弹窗是隐藏的。
    • position: fixed;  top, left, 和 transform 属性一起工作,将弹窗定位在浏览器窗口的中心。
    • background-color, color, padding, border-radius  box-shadow 属性用于美化弹窗,使其看起来更像一个模态框。
    • z-index 确保弹窗显示在页面上的其他元素之上。
    • text-align: center; 确保弹窗内的文本水平居中。

    使用方法

    要显示和隐藏这个自定义提示弹窗,你将需要使用JavaScript来添加事件监听器,并在适当的时机改变#customAlertdisplay样式。例如:

    function showAlert() {
        document.getElementById('customAlert').style.display = 'block';
    }
    
    function hideAlert() {
        document.getElementById('customAlert').style.display = 'none';
    }

    在实际应用中,你可能会将showAlerthideAlert函数绑定到按钮的点击事件或其他用户交互上,以便控制弹窗的显示和隐藏。

  • js实时显示屏幕尺寸

    <div id="screenWidthDisplay">屏幕宽度: </div>
    <script>
    // 函数用于更新屏幕宽度显示
    function updateScreenWidth() {
    var screenWidthDisplay = document.getElementById('screenWidthDisplay');
    // 刷新屏幕宽度显示,而不是追加
    screenWidthDisplay.textContent = '屏幕宽度: ' + window.innerWidth + 'px';
    }
    // 监听窗口resize事件
    window.addEventListener('resize', updateScreenWidth);
    // 初始化屏幕宽度显示
    updateScreenWidth();
    </script>

     

  • js获取ie浏览器版本

    js获取ie浏览器版本

    <script>
    var version = document.documentMode;
    console.log('IE version: ' + version);
    var userAgent = window.navigator.userAgent;
    var version = parseInt(userAgent.substring(userAgent.indexOf('MSIE ') + 5, userAgent.indexOf('.', userAgent.indexOf('MSIE '))), 10);
    console.log('userAgent:'+userAgent);
    if (isNaN(version)) {
      // 对于IE 11和其他现代浏览器,使用以下方法
      var match = /Trident\/.*rv:(\d+.\d+)/.exec(userAgent);
      if (match) {
        version = parseFloat(match[1]);
      }
    }
    
    console.log('Browser version: ' + version);
    </script>

     

  • 启用ie浏览器的方法

    方法一:

    来源:https://www.52pojie.cn/thread-1855968-1-1.html

    创建一个.vbs文件,把下面的代码贴进去,然后双击即可

    启动ie.vbs

    CreateObject("InternetExplorer.Application").Visible=true

     

     

  • data.get和request.form.get

    request.form.get('书籍作者')data.get('title', book.title) 这两行代码都用于从 HTTP 请求中获取数据,但它们在用法和上下文中存在一些差异:

    1. 数据来源
      • request.form.get('书籍作者'):这行代码用于从 Flask 的 request.form 属性中获取数据,request.form 是一个类似于字典的对象,包含了客户端通过 application/x-www-form-urlencoded  multipart/form-data 编码类型提交的表单数据。
      • data.get('title', book.title):这行代码中的 data 通常是一个从 request.get_json() 解析得到的 JSON 对象,get 方法用于从 JSON 对象中获取数据。如果指定的键(在这个例子中是 'title')存在,则返回其对应的值;如果不存在,则返回默认值 book.title
    2. 数据类型
      • request.form.get() 方法返回的数据类型取决于表单字段的数据类型,通常是字符串。
      • data.get() 方法返回的数据类型取决于 JSON 对象中的数据类型,可能是字符串、数字、布尔值、列表或字典等。
    3. 默认值
      • request.form.get('书籍作者') 没有提供默认值的参数,如果在表单数据中没有找到 '书籍作者' 键,将返回 None
      • data.get('title', book.title) 明确提供了默认值 book.title,如果在 JSON 数据中没有找到 'title' 键,将使用书籍当前的标题作为默认值。
    4. 使用场景
      • 当您处理一个包含表单数据的 POST 请求时,通常会使用 request.form.get() 来获取数据。
      • 当您处理一个发送 JSON 数据的 POST 请求时,通常会使用 request.get_json() 来解析数据,然后使用 data.get() 来获取特定的字段。
    5. 编码类型
      • request.form 适用于处理 URL 编码的表单数据(例如,来自一个带有 <input> 元素的 HTML 表单)。
      • request.get_json() 适用于处理 JSON 编码的数据(例如,来自一个使用 AJAX 或其他 JavaScript 方法发送 JSON 格式数据的前端应用)。

    在实际应用中,选择哪种方法取决于您的具体需求和客户端发送的数据格式。如果您的 Flask 应用期望接收 JSON 格式的请求体,那么使用 request.get_json()data.get() 是合适的;如果您的表单使用传统的表单提交方式,那么使用 request.form.get() 会更合适。

  • bat脚本启动py虚拟环境

    bat脚本启动虚拟环境

    chcp 65001
    @echo off
    title 电子书管理
    
    :: 激活虚拟环境
    call .\.venv\Scripts\activate.bat
    
    :: 运行 Python 应用程序
    python app.py
    
    :: 暂停,等待用户按键后关闭窗口
    pause

     

  • py遍历文件夹

    若你的文件夹中包含日文字符,请不要使用glob库,因为它不识别日文字符.

  • flask 分页

    <nav class="blog-pagination" aria-label="Pagination">
    {% if paginate.has_prev %}
    <a class="btn btn-outline-primary rounded-pill" href="{{ url_for('index.index', page=paginate.prev_num) }}">上一页</a>
    {% else %}
    <a class="btn btn-outline-primary rounded-pill" href="#">上一页</a>
    {% endif %}
    
    <!-- 显示所有存在的页码 -->
    {% for num in range(1, paginate.pages + 1) %}
    <a class="btn btn-outline-primary rounded-pill {% if num == paginate.page %}active{% endif %}" href="#">{{ num }}</a>
    {% endfor %}
    
    {% if paginate.has_next %}
    <a class="btn btn-outline-secondary rounded-pill" href="{{ url_for('index.index', page=paginate.next_num) }}">下一页</a>
    {% else %}
    <a class="btn btn-outline-secondary rounded-pill disabled">下一页</a>
    {% endif %}
    </nav>

     

  • py 视频转码

    需要你电脑本身安装的有FFmpeg,你下载的压缩包形式的话,记得把里面的bin路径加入到电脑环境变量里,不然无法识别

    功能:

    在视频同目录下转码成mp4文件

    # 指定要搜索的目录路径
    输入文件路径 = r‘E:\阿里云盘下载\Oracle合集\ORACLE视频教学’
    import subprocess,os,json
    
    def ffprobe_get_info(输入文件路径):
        """使用ffprobe获取视频文件的元数据信息"""
        try:
            probe = subprocess.run(['ffprobe', '-v', 'error', '-show_entries', 'format=duration,size:stream=width,height,avg_frame_rate', '-of', 'json', 输入文件路径], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            if probe.returncode != 0:
                print(f"ffprobe error: {probe.stderr.decode()}")
                return None
            return json.loads(probe.stdout)
        except Exception as e:
            print(f"An error occurred: {e}")
            return None
    
    def 自动转码视频(输入文件路径, 输出文件路径):
        """使用ffprobe和ffmpeg自动转码视频"""
        video_info = ffprobe_get_info(输入文件路径)
    
        # 寻找第一个具有有效宽度和高度信息的流
        for stream in video_info['streams']:
            if 'width' in stream and 'height' in stream:
                width = stream['width']
                height = stream['height']
                fps = stream['avg_frame_rate'].split('/')[0]
                break
        else:
            print('未找到有效的视频流')
            return False  # 如果没有找到有效的流,则返回False
    
        duration = float(video_info['format']['duration'])
    
        # 计算视频比特率,这里假设为文件大小的85%,您可以根据需要调整
        file_size = os.path.getsize(输入文件路径)
        video_bitrate = int(0.85 * (file_size * 8 / duration))
    
        # 构建FFmpeg转码命令
        ffmpeg命令 = [
            'ffmpeg',
            '-err_detect', 'ignore_err',  # 添加错误容错选项
            '-i', 输入文件路径,
            '-vcodec', 'h264',
            '-acodec', 'aac',
            '-strict', 'experimental',
            '-movflags', '+faststart',
            '-b:v', f'{video_bitrate}k',
            '-vf', f"scale=-2:{height}",  # 使用height变量
            '-b:a', '128k',
            '-ac', '2',
            '-r', fps,
        ] + [输出文件路径]  # 将输出文件路径添加到命令列表中
    
        # 运行FFmpeg命令
        try:
            subprocess.run(ffmpeg命令, check=True)
            print('视频转码成功')
            return True
        except subprocess.CalledProcessError:
            print('视频转码失败')
            return False
    
    
    # 获取指定文件夹所有非mp4文件绝对路径
    def 获取所有非mp4文件路径(目录路径, 视频格式列表):
        非mp4文件列表 = []
        # 排除 'mp4' 格式
        非mp4格式列表 = [格式 for 格式 in 视频格式列表 if 格式 != 'mp4']
        # 遍历目录
        for root, dirs, files in os.walk(目录路径):
            for 文件名 in files:
                文件扩展名 = 文件名.lower().rsplit('.', 1)[-1]  # 获取文件扩展名
                if 文件扩展名 in 非mp4格式列表:
                    非mp4文件列表.append(os.path.join(root, 文件名))
        return 非mp4文件列表
    
    # 定义支持的视频格式列表
    video_formats = [
        'rmvb','avi', 'mov', 'wmv', 'flv', 'mkv', 'rm',
        'asf', 'mpg', '3gp', 'vob', 'm4v', 'f4v', 'webm',
        'm2ts', 'ts', 'divx', 'xvid', 'mxf'
    ]
    
    # 指定要搜索的目录路径
    输入文件路径 = r'E:\阿里云盘下载\Oracle合集\ORACLE视频教学'
    
    # 获取所有非mp4格式的视频文件路径
    所有非mp4文件路径列表 = 获取所有非mp4文件路径(输入文件路径, video_formats)
    
    # 对每个非mp4格式的视频文件执行转码操作
    for 单个非mp4文件路径 in 所有非mp4文件路径列表:
        try:
            # 构造新的mp4文件路径
            输出文件路径 = os.path.splitext(单个非mp4文件路径)[0] + '.mp4'
            print(单个非mp4文件路径)
            print(输出文件路径)
            # 执行转码操作
            自动转码视频(单个非mp4文件路径, 输出文件路径)
            # 如果转码成功,删除原始文件
            # os.remove(单个非mp4文件路径)
            print(f"原始文件已转码完成: {单个非mp4文件路径}")
            # print(f"已删除原始文件: {单个非mp4文件路径}")
        except Exception as e:
            print(f"处理文件 {单个非mp4文件路径} 时发生错误: {e}")

     

  • ffmpeg命令

    ffmpeg命令 = [
            'ffmpeg',
            '-i', 输入文件路径,                       # 输入文件路径
            '-err_detect', 'ignore_err',               # 添加错误容错选项
            '-vcodec', 'libx264',                      # 使用 libx264 视频编解码器
            '-acodec', 'aac',                          # 使用 AAC 音频编解码器
            '-strict', 'experimental',                 # 允许使用实验性编解码器
            '-movflags', '+faststart',                 # 使 MP4 文件快速开始播放
            '-b:v', f'{video_bitrate}',                # 视频比特率
            '-vf', f"scale=-2:{height}",               # 视频过滤器,缩放视频高度,保持宽高比
            '-b:a', '128k',                           # 音频比特率
            '-ac', '2',                                # 音频通道数
            '-r', str(fps),                            # 帧率
            输出文件路径                              # 输出文件路径
        ]