【Oracle APEX开发小技巧 8 】图片回显及多图片URL在页面回显点击放大

用户在现场使用应用小程序拍照上传,存储的是图片的URL,那么如何将图片在APEX端回显呢?多图片URL在页面回显点击放大又是如何实现的呢?接下来请随我一探究竟

要实现上面的效果用到了图片拼接和遮罩层,具体操作:

图片拼接:

加载页初始化-创建动态操作-执行服务器端代码-PL/SQL-拼接图片并存储到页项中去

拼接URL,设置图片固定大小

代码:

sql 复制代码
DECLARE
    V_COUNT      NUMBER(20); --记录状态
    V_IMAGES_URL CLOB; --拼接图片
    V_ERR_MSG    NVARCHAR2(1000); --记录异常
    /**
     * CREATE BY: WXX
     * CREATE DATE: 2024/8/20 10:11
     * MODIFY BY:WXX    拼接图片  (多张)
     * MODIFY DATE:2024/8/26 19:11
     * DESCRIBE: P305拼接图片
     */
BEGIN
    --拼接图片
    V_IMAGES_URL := '<FIGURE CLASS="IMAGE">';
    FOR TIME IN ( SELECT IMAGES
                  FROM CHECK_CHANGE_RECORD
                  WHERE RECORD_ID = :P305_RECORD_ID
                    AND TENANT_ID = :USERTENANT
                    AND BASE_DEPT_ID = :BASE_DEPT_ID
        )
        LOOP
            FOR image_url IN (SELECT REGEXP_SUBSTR(TIME.IMAGES, '[^,]+', 1, LEVEL) AS IMAGE_URL
                              FROM DUAL
                              CONNECT BY LEVEL <= LENGTH(REGEXP_REPLACE(TIME.IMAGES, '[^,]+')) + 1)
                LOOP
                    V_IMAGES_URL := V_IMAGES_URL || '<IMG SRC="' || image_url.IMAGE_URL || '" style="width:100px; height:100px;" >';
                END LOOP;
        END LOOP;
    V_IMAGES_URL := V_IMAGES_URL || '</FIGURE>';
    APEX_UTIL.SET_SESSION_STATE('P305_IMAGES', V_IMAGES_URL);
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        V_COUNT := -1;
        V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
        JA_WRITE_LOG(:APP_PAGE_ALIAS || ':' || :APP_PAGE_ID || ':拼接图片', 'ERROR', V_ERR_MSG, :USER_ID,
                     :USERTENANT, :APP_NAME || ':' || :APP_ID);
END;


-- DECLARE
--     V_COUNT      NUMBER(20); --记录状态
--     V_IMAGES_URL CLOB; --拼接图片
--     V_ERR_MSG    NVARCHAR2(1000); --记录异常
--     /**
--      * CREATE BY: WXX
--      * CREATE DATE: 2024/8/20 10:11
--      * MODIFY BY:
--      * MODIFY DATE:
--      * DESCRIBE: P305拼接图片
--      */
-- BEGIN
--     --拼接图片
--     V_IMAGES_URL := '<FIGURE CLASS="IMAGE">';
--     FOR TIME IN ( SELECT IMAGES
--                   FROM CHECK_CHANGE_RECORD
--                   WHERE RECORD_ID = :P305_RECORD_ID
--                     AND TENANT_ID = :USERTENANT
--                     AND BASE_DEPT_ID = :BASE_DEPT_ID
--         )
--         LOOP

--             V_IMAGES_URL := V_IMAGES_URL || '<IMG SRC="' || TIME.IMAGES || '">';
--         END LOOP;
--     V_IMAGES_URL := V_IMAGES_URL || '</FIGURE>';
--     APEX_UTIL.SET_SESSION_STATE('P305_IMAGES', V_IMAGES_URL);
-- EXCEPTION
--     WHEN OTHERS THEN
--         ROLLBACK;
--         V_COUNT := -1;
--         V_ERR_MSG := SQLERRM || CHR(13) || DBMS_UTILITY.FORMAT_ERROR_BACKTRACE;
--         JA_WRITE_LOG(:APP_PAGE_ALIAS || ':' || :APP_PAGE_ID || ':拼接图片', 'ERROR', V_ERR_MSG, :USER_ID,
--                      :USERTENANT, :APP_NAME || ':' || :APP_ID);
-- END;

说明:

  1. 首先,将V_IMAGES_URL初始化为包含一个HTML标签`<FIGURE CLASS="IMAGE">`的字符串。

  2. 使用FOR循环从CHECK_CHANGE_RECORD表中查询满足特定条件(RECORD_ID、TENANT_ID和BASE_DEPT_ID)的记录,并将结果存储在TIME变量中。

  3. 对于每个TIME记录,再次使用FOR循环来处理IMAGES字段中的多个图片URL。这里使用了Oracle的正则表达式函数REGEXP_SUBSTR来分割IMAGES字段中的逗号分隔的图片URL。

  4. 在内层循环中,将每个图片URL拼接到V_IMAGES_URL变量中,并在每个图片URL前添加一个`<IMG>`标签,设置图片的宽度、高度和边距样式。

  5. 在所有图片URL都拼接完成后,将`</FIGURE>`标签添加到V_IMAGES_URL的末尾,完成整个图片列表的拼接。

  6. 使用APEX_UTIL.SET_SESSION_STATE函数将拼接好的图片列表存储到会话状态中,项名为'P305_IMAGES'。

  7. 异常处理部分:如果在执行过程中发生任何异常,将回滚事务,将V_COUNT设置为-1,并将错误信息存储在V_ERR_MSG变量中。然后调用JA_WRITE_LOG函数记录错误日志。

这段代码的主要功能是从数据库中获取一组图片URL,将它们拼接成一个HTML格式的图片列表,并将结果存储到会话状态中供后续使用。

遮罩层的设置:

页-CSS-文件URL(一定要记得导入对应CSS文件#WORKSPACE_FILES#static/layui-v2.6.13/layui/css/layui.css)

设置固定图片大小,否则

对应CSS内嵌:

页-CSS-引入对应CSS文件URL-内嵌

代码如下

css 复制代码
img{
    width: 90%;
    /* height: 50%; */
}

/*点击上传的文件(图片全屏放大)start*/
.bigImg {
    position: absolute;
    top: 50%;
    left: 50%;
    /*图片向左移动自身宽度的50%, 向上移动自身高度的50%。*/
    transform: translate(-50%,-50%);
}
/*遮罩层*/
.opacityBottom {
    width: 100%;
    height: 100%;
    position: fixed;
    background: rgba(0,0,0,0.8);
    z-index: 1000;
    top: 0;
    left: 0;
}

统一图片大小后的效果展示:

点击图片放大的效果展示:

相关推荐
猹叉叉(学习版)几秒前
【ASP.NET CORE】 9. 托管服务
数据库·笔记·后端·c#·asp.net·.netcore
Francek Chen1 小时前
【大数据存储与管理】分布式数据库HBase:03 HBase数据模型
大数据·数据库·hadoop·分布式·hdfs·hbase
小吴编程之路8 小时前
MySQL 索引核心特性深度解析:从底层原理到实操应用
数据库·mysql
~莫子8 小时前
MySQL集群技术
数据库·mysql
凤山老林8 小时前
SpringBoot 使用 H2 文本数据库构建轻量级应用
java·数据库·spring boot·后端
就不掉头发9 小时前
Linux与数据库进阶
数据库
与衫9 小时前
Gudu SQL Omni 技术深度解析
数据库·sql
咖啡の猫9 小时前
Redis桌面客户端
数据库·redis·缓存
oradh9 小时前
Oracle 11g数据库软件和数据库静默安装
数据库·oracle
what丶k9 小时前
如何保证 Redis 与 MySQL 数据一致性?后端必备实践指南
数据库·redis·mysql