起源

  手边有块4K外接触摸屏,平时用不到的时候就在旁边亮着显示桌面,不过主屏幕的桌面是横向的,外接屏喜欢竖向方,所以Win10的基本桌面背景就不好满足需求了。

  之间试过ACDSee的幻灯片,也试过PPT,从相册库的大小和增删过程来说还是感觉很繁琐,所以就做了这么个简单的html,归根到底,还是懒...

Owl Carousel 2

  这个插件库也是百度到的,用起来确实很贴合自己的需求,也是很幸运的有木有。本项目中用到的版本是 2.3.4,在官网下载的包里带了 3.3.1 的jQuery 以及 3.1.11 的 jquery.mousewheel 插件,用于滚轮翻页;其他插件可以在官网找下。

  目前项目实现的功能:

  • 以最大边为基准的自适应图片最大化,超出部分裁剪。测试使用的屏环境是1080*1920。
  • 图片自动轮询播放,轮转时间为30S,目前写死在代码里,可以根据自己需要加设置菜单。
  • 鼠标悬停在页面上时暂停轮询,如果单屏幕应用可以在配置中把autoplayHoverPause设为false
  • 左键点击任意处切换播放/停止状态,停止时左上角显示三角指示。
  • 鼠标中键滚轮切换上下张,触摸屏滑动开启,但图片质量大的情况下触摸滑动时会卡卡的。
  • 图片基于当前时间戳随机顺序播放,每次刷新均为不同顺序;若不需要随机就把随机处理去掉;若随机顺序每次固定可以写死随机数种子。
  • 自动检测图片资源是否存在,图片加载失败自动在相册中去除元素。
  • 目前文件路径及文件名为固定,图片资源复制在本目录下以供调用。一开始想用input索引到指定目录,不过找了找除了用ActiveX没其他办法了(静态页面),所以就懒得弄了。
  • 文件名为Column (1).jpg,就是Windows的全选重命名默认格式,图片数量若大于561张需要改下代码里的maxFileNum,小于的话可以不改,找不到的会自动去除嘛。
  • 使用Bat调用Chrome并加参数实现自动全屏播放不可退出,当然可以在任务栏右键关闭或Alt+F4。

  总之目前只是实现的自己的刚需,所以没做太多通用性设计,像目录指定、图片文件名自动检索、各种参数设置,下方进度条等等,之后有需求再加吧。


  index_Current - V1_11_220618更新

  • 添加设置菜单,点击图片任意处暂停,显示暂停图标;点击暂停图标显示设置菜单。
  • 设置数据保存为json文件,文件位置为项目根目录,或直接改json内容。
  • 更改启动方式为Chrome的自定义工作环境为 D:\ChromeDebug_ATY\AlbumOwl,开启 --test-type --disable-web-security 模式以供本地跨域调用json。
    "ChromeParameters": "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --user-data-dir="D:\ChromeDebug_ATY\AlbumOwl" --test-type --disable-web-security --start-fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html"
  • 全屏方式换为非 kiosk 模式的 --start-fullscreen,使用 Win+Shift+Right 实现屏幕切换。
  • 两种方式去除无资源图片元素,同时在单次轮回后刷新页面,以保证无加载失败的图片显示出来,并实现无线轮询播放(也可以用 owl 的 destroy 加 initialize 实现)。
  • 动态根据窗口大小相应图片尺寸,不会再出现改变高度出现底边的情况。

  index_List - V1_01_220710更新

  • 由原工程目录下的相册文件夹改为其他文件夹的文件列表,减少大文件副本的空间占用。
  • 最大10张同时加载图片,减小过大过多图片同时加载时的内存占用或内存不足。
  • 自动检测文件列表中已删除文件并刷新,避免显示空白页。
  • 修改随机函数以适应文件名列表加载形式。

问题记录

HTML中 js刷新页面的几种方法

Guohao_Chen

  • reload() 方法:
    语法:location.reload([bForceGet])
    参数: bForceGet, 可选参数, 默认为 false,从客户端缓存里取当前页。true, 则以 GET 方式,从服务端取最新的页面, 相当于客户端点击 F5(“刷新”)
    该方法强迫浏览器刷新当前页面。
  • replace() 方法:
    语法: location.replace(URL)
    该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,你不能通过“前进”和“后退”来访问已经被替换的URL。

在实际应用的时候,重新刷新页面的时候,我们通常使用: location.reload() 或者是 history.go(0) 来做。因为这种做法就像是客户端点F5刷新页面,所以页面的method=”post”的时候,会出现”网页过期”的提示。那是因为Session的安全保护机制。

可以想到: 当调用 location.reload() 方法的时候, aspx页面此时在服务端内存里已经存在, 因此必定是 IsPostback 的。

如果有这种应用: 我们需要重新加载该页面,也就是说我们期望页面能够在服务端重新被创建, 我们期望是 Not IsPostback 的。这里,location.replace() 就可以完成此任务。被replace的页面每次都在服务端重新生成。

  • 返回并刷新页面:

    <script language=”JavaScript”>
      //document.referrer 前一个页面的URL
      location.replace(document.referrer);
    </script>

    不要用 history.go(-1),或 history.back();来返回并刷新页面,这两种方法不会刷新页面。

  • 自动刷新页面的方法:

    • 页面自动刷新:把代码<meta http-equiv=”refresh” content=”20″>加入区域中,其中20指每隔20秒刷新一次页面。
    • 页面自动跳转:把代码<meta http-equiv=”refresh” content=”20;url=http://www.baidu.con”>加入区域中,其中20指隔20秒后跳转到http://www.baidu.con页面。
    • 页面自动刷新js版

      <script language=”JavaScript”>
      function myrefresh(){
          window.location.reload();
      }
      setTimeout(‘myrefresh()’,1000); //指定1秒刷新一次
      </script>
  • 如果想关闭窗口时刷新或者想开窗时刷新的话,在中调用以下语句即可。

    <body onload=”opener.location.reload()”> 开窗时刷新
    <body onUnload=”opener.location.reload()”> 关闭时刷新
    
    <script language=”javascript”>
        window.opener.document.location.reload()
    </script>

Chrome浏览器默认全屏启动(非--kiosk模式)

实际上,只需要修改快捷方式的参数,只不过后面不加 --kiosk,而是在后面加 --start-fullscreen 即可!

Chrome启动参数--user-data-dir 和 --profile-directory的关系

--user-data-dir 浏览器存储用户配置文件的目录。
--profile-directory 选择要与启动的第一个浏览器关联的配置文件目录。

user-data-dir 下可以有多个 profile-directory,每创建一个user就就会多一个profile-directory,其中默认的profile-directory 位于“user-data-dir\Default”, 之后每创建一个,对应的文件夹名称是:“user-data-dir\Profile 2”、“user-data-dir\Profile 3”

m_Options.AddArgument("--user-data-dir=C:/Users/Me/AppData/Local/Google/Chrome/User Data");
m_Options.AddArgument("--profile-directory=Default");

————————————————
版权声明:本文为CSDN博主「bigcarp」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bigcarp/article/details/121437108

index_List.html

Bat部分

  • 以UTF-8输出本目录下所有后缀为jpg与png的子文件到NameList.data,然后移动到AlbumOwl工程目录下。

    CHCP 65001    %UTF-8 Output%
    dir *.jpg *.png /s /b /a:a > NameList.data
    
    if exist NameList.data (move NameList.data E:\Projects\ATY\ProjectsOfHTML\Done\AlbumOwl\NameList.data)

index.html(V2_01_220710)

<!doctype html>
<html>

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>AlbumOwl - ATY</title>

    <link rel="stylesheet" href="dist/assets/owl.carousel.min.css" />
    <link rel="stylesheet" href="dist/assets/owl.theme.default.min.css" />
    <script src="dist/vendors/jquery.min.js"></script>
    <script src="dist/owl.carousel.min.js"></script>

    <script src="dist/vendors/jquery.mousewheel.min.js"></script>

    <style>
        body,
        #owlMain,
        #owlMain div,
        #owlMain a,
        #owlMain img {
            margin: 0;
            width: 100%;
            height: 100%;
            text-align: center;
            overflow: hidden;
        }

        #owlMain img {
            /* width: auto; */
            object-fit: cover;
            height: 105%;
        }

        #stopImg,
        #settingMenu {
            position: absolute;
            top: 0;
            left: 0;
            z-index: 999;
            text-align: center;
            margin: 1%;
            padding: 1%;
        }

        #stopImg,
        #settingMenu div {
            cursor: pointer;
        }

        #menuColumn:hover,
        #menuRow:hover,
        #menuSave:hover {
            color: #b700ff;
        }
    </style>

</head>

<body>
    <div id="owlMain" class="owl-carousel"></div>
    <div id="settingMenu" style="right:0; background-color:white;">
        <p>Album path (Album/): </p>
        <input id="albumPath" />
        <p>Img name: (Column): </p>
        <input id="imgName" />
        <p>Img suffixes (.jpg): </p>
        <input id="imgSuffixes" />
        <p>Cycle time seconds (30): </p>
        <input id="cycleTime" />
        <p>Max file number (561): </p>
        <input id="maxFileNum" />
        <p>Current mode:</p>
        <div id="menuColumn" style="display:inline; margin-right: 16px; padding: 0.5%; border: 1px solid black;">Column
        </div>
        <div id="menuRow" style="display:inline; padding: 0.5%; border: 1px solid black;">
            &nbsp;&nbsp;&nbsp;Row&nbsp;&nbsp;&nbsp;</div>
        <div id="menuSave" style="margin-top: 2.5%; padding: 0.5%; border: 1px solid black;">Save</div>
        <p></p>
    </div>
    <img id="stopImg" src="dist/assets/owl.video.play.png" />

    </div>

    <!-- <input type="file" webkitdirectory multiple> -->


    <script type="text/javascript">
        // "ChromeParameters": "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --user-data-dir="D:\ChromeDebug_ATY\AlbumOwl" --test-type --disable-web-security --start-fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html"
        // var loadingGif = "dist/assets/ajax-loader.gif"

        var owlMainElement = document.getElementById("owlMain");
        var owl = $("#owlMain");
        var imgOrderList = [];
        var imgErrorList = [];
        var currentImgNum = 0;
        var playStopFlag = "Play";      // "Play" or "Stop"
        var maxDisplayNum = 12;

        var saveJsonGroup = {
            "dirPath": "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/",
            "albumPath": "Album/",
            "imgName": "Column",
            "imgSuffixes": ".jpg",
            "cycleTime": 20,
            "maxFileNum": 1000,
            "currentMode": "Column"
        };

        $.ajax({
            url: "setting.json",
            // async: false,
            success: function (result) {
                saveJsonGroup.albumPath = result.albumPath;
                saveJsonGroup.imgName = result.imgName;
                saveJsonGroup.imgSuffixes = result.imgSuffixes;
                saveJsonGroup.cycleTime = result.cycleTime * 1;
                saveJsonGroup.maxFileNum = result.maxFileNum * 1;
                saveJsonGroup.currentMode = result.currentMode;
                // console.log(result);
                // console.log(saveJsonGroup);
            }
        });


        var nameListGroup = [];
        var loadOverFlag = 0;
        $.ajax({
            url: "NameList.data",
            success: function (result) {
                nameListGroup = result.split("\r\n");
                // random img
                var ramdonSeed = new Date().getTime();
                nameListGroup.sort(function () { return 0.5 - Math.random(); });
                // console.log(nameListGroup);
                loadOverFlag = 1;
            }
        });


        $(document).ready(function () {
            if(loadOverFlag == 0){
                location.reload();
            }

            saveJsonGroup.imgName = saveJsonGroup.currentMode

            // add img element
            // for (var i = 1; i <= saveJsonGroup.maxFileNum; i++) {
            for (var i = 1; i <= maxDisplayNum; i++) {
                var imgElementCreat = new Image();
                imgElementCreat.id = "img" + i;
                // console.log(nameListGroup[i - 1]);
                imgElementCreat.src = nameListGroup[i - 1];
                imgElementCreat.onclick = function () {
                    if (playStopFlag == "Play") {
                        playStopFlag = "Stop";
                        document.getElementById("stopImg").hidden = false;
                        owl.trigger("stop.owl.autoplay");
                    }
                    else {
                        playStopFlag = "Play";
                        document.getElementById("stopImg").hidden = true;
                        owl.trigger("play.owl.autoplay", [saveJsonGroup.cycleTime * 1000]);
                        document.getElementById("settingMenu").hidden = true;
                    }
                    // console.log("clicked: " + playStopFlag);
                };
                imgElementCreat.onerror = function () {
                    imgErrorList.push(this.id.replace("img", "") * 1);
                    // console.log(imgErrorList);
                    this.parentNode.parentNode.removeChild(this.parentNode);
                };
                owlMainElement.appendChild(imgElementCreat);
            }

            // set height with window
            owlMainElement.style.maxHeight =
                document.documentElement.clientHeight + "px";
            owlMainElement.style.height =
                document.documentElement.clientHeight + "px";

            // menu display
            document.getElementById("settingMenu").hidden = true;
            document.getElementById("albumPath").value = saveJsonGroup.albumPath;
            document.getElementById("imgName").value = saveJsonGroup.imgName;
            document.getElementById("imgSuffixes").value = saveJsonGroup.imgSuffixes;
            document.getElementById("cycleTime").value = saveJsonGroup.cycleTime;
            document.getElementById("maxFileNum").value = saveJsonGroup.maxFileNum;
            if (saveJsonGroup.currentMode == "Column") {
                document.getElementById("menuColumn").style.backgroundColor = "#d1ffff";
            }
            else if (saveJsonGroup.currentMode == "Row") {
                document.getElementById("menuRow").style.backgroundColor = "#d1ffff";
            }

            document.getElementById("stopImg").onclick = function () {
                document.getElementById("settingMenu").hidden = false;
            };

            document.getElementById("menuColumn").onclick = function () {
                saveJsonGroup.currentMode = "Column";
                saveJsonGroup.imgName = "Column";
                document.getElementById("imgName").value = "Column";
                document.getElementById("menuColumn").style.backgroundColor = "#d1ffff";
                document.getElementById("menuRow").style.backgroundColor = "#ffffff";
            };
            document.getElementById("menuRow").onclick = function () {
                saveJsonGroup.currentMode = "Row";
                saveJsonGroup.imgName = "Row";
                document.getElementById("imgName").value = "Row";
                document.getElementById("menuRow").style.backgroundColor = "#d1ffff";
                document.getElementById("menuColumn").style.backgroundColor = "#ffffff";
            };
            document.getElementById("menuSave").onclick = function () {
                // not null
                if (
                    !document.getElementById("albumPath").value
                    || !document.getElementById("imgName").value
                    || !document.getElementById("imgSuffixes").value
                    || !document.getElementById("cycleTime").value
                    || !document.getElementById("maxFileNum").value
                ) {
                    alert("Input cannot be empty!");
                }
                else {
                    saveJsonGroup.albumPath = document.getElementById("albumPath").value;
                    saveJsonGroup.imgName = document.getElementById("imgName").value;
                    saveJsonGroup.imgSuffixes = document.getElementById("imgSuffixes").value;
                    saveJsonGroup.cycleTime = document.getElementById("cycleTime").value;
                    saveJsonGroup.maxFileNum = document.getElementById("maxFileNum").value;
                    // console.log(saveJsonGroup);

                    if (typeof saveJsonGroup === 'object') {
                        saveJsonGroup = JSON.stringify(saveJsonGroup, undefined, 4);
                    }
                    var blob = new Blob([saveJsonGroup], { type: 'text/json' });
                    var a = document.createElement('a');
                    a.download = "setting.json";
                    a.href = window.URL.createObjectURL(blob);
                    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
                    a.click();

                    document.getElementById("settingMenu").hidden = true;
                    document.getElementById("stopImg").hidden = true;
                    owl.trigger('play.owl.autoplay', [saveJsonGroup.cycleTime * 1000]);
                }
            };

            // start Owl Carousel
            owl.owlCarousel({
                items: 1,
                loop: false,
                mouseDrag: false,
                autoplay: true,
                autoplayTimeout: saveJsonGroup.cycleTime * 1000,
                autoplayHoverPause: true,
                nav: false,
                dots: false,
                center: true,
                lazyLoad: true,
            });
            document.getElementById("stopImg").hidden = true;
            owl.trigger('play.owl.autoplay', [saveJsonGroup.cycleTime * 1000]);

            // mouse wheel action
            owl.on("mousewheel", ".owl-stage", function (e) {
                if (e.deltaY > 0) {
                    owl.trigger("prev.owl");
                } else {
                    owl.trigger("next.owl");
                }
                e.preventDefault();
            });

            owl.on("translate.owl.carousel", function () {
                // console.log("Finished one img");
                // console.log(imgErrorList);
                currentImgNum++;
                // console.log(saveJsonGroup.maxFileNum - imgErrorList.length - currentImgNum);
                console.log(maxDisplayNum - imgErrorList.length - currentImgNum);
                // if ((saveJsonGroup.maxFileNum - imgErrorList.length - currentImgNum) <= 0) {
                if ((maxDisplayNum - imgErrorList.length - currentImgNum) <= 2) {
                    location.reload();
                }
            });
        });

        $(window).resize(function () {
            // alert("Changed");
            // set height with window
            owlMainElement.style.maxHeight =
                document.documentElement.clientHeight + "px";
            owlMainElement.style.height =
                document.documentElement.clientHeight + "px";
        });


        // function isSupportFileApi() {
        //     if (window.File && window.FileList && window.FileReader && window.Blob) {
        //         return true;
        //     }
        //     return false;

    </script>

</body>

</html>

index_Current.html

Bat部分(废弃)

::@echo off
start ./AlbumOwl_MicrosoftEdge.lnk
::start ./AlbumOwl_GoogleChrome.lnk
::"C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --user-data-dir="C:\ChromeDebug" -kiosk -fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html"
::"C:\Program Files (x86)\Microsoft\Edge\Application\msedge.exe" --kiosk --edge-kiosk-type=fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html"
exit

  实现起来有两种方式,一是复制一个Chrome的标准快捷方式,然后右键属性里加入 --user-data-dir="C:\ChromeDebug" -kiosk -fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html",然后就在Bat里start这个快捷方式就行了;另一种就是直接找Chrome的exe,其实就是把快捷方式里的内容复制出来在Bat执行,这样可移植性和目录下的文件数量都有优势,不过有个缺点就是语句不存在执行完的状态,Bat的黑窗口需要手动关。

  • --user-data-dir="C:\ChromeDebug"
    第一部分是使用Debug环境的Chrome,这可以和日常用的Chrome环境分开,不需要可以不加。
  • -kiosk -fullscreen "file:///E:/index.html"
  • --kiosk --edge-kiosk-type=fullscreen "file:///E:/index.html"
    kiosk是调用Chrome的一个演示模式,所以可以自动全屏无法退出,无法右键;后边的文件就是打开Chrome后自动打开的网页。
后记:经过长时间摸索,因为两个屏幕的定位问题,最终还是只留了Edge的快捷方式,换屏 Shift+Win+Right 还是手动来...

index.html(V1_11_220618)

<!doctype html>
<html>

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>AlbumOwl - ATY</title>

    <link rel="stylesheet" href="dist/assets/owl.carousel.min.css" />
    <link rel="stylesheet" href="dist/assets/owl.theme.default.min.css" />
    <script src="dist/vendors/jquery.min.js"></script>
    <script src="dist/owl.carousel.min.js"></script>

    <script src="dist/vendors/jquery.mousewheel.min.js"></script>

    <style>
        body,
        #owlMain,
        #owlMain div,
        #owlMain a,
        #owlMain img {
            margin: 0;
            width: 100%;
            height: 100%;
            text-align: center;
            overflow: hidden;
        }

        #owlMain img {
            /* width: auto; */
            object-fit: cover;
            height: 105%;
        }

        #stopImg,
        #settingMenu {
            position: absolute;
            top: 0;
            left: 0;
            z-index: 999;
            text-align: center;
            margin: 1%;
            padding: 1%;
        }

        #stopImg,
        #settingMenu div {
            cursor: pointer;
        }

        #menuColumn:hover,
        #menuRow:hover,
        #menuSave:hover {
            color: #b700ff;
        }
    </style>

</head>

<body>
    <div id="owlMain" class="owl-carousel"></div>
    <div id="settingMenu" style="right:0; background-color:white;">
        <p>Album path (Album/): </p>
        <input id="albumPath" />
        <p>Img name: (Column): </p>
        <input id="imgName" />
        <p>Img suffixes (.jpg): </p>
        <input id="imgSuffixes" />
        <p>Cycle time seconds (30): </p>
        <input id="cycleTime" />
        <p>Max file number (561): </p>
        <input id="maxFileNum" />
        <p>Current mode:</p>
        <div id="menuColumn" style="display:inline; margin-right: 16px; padding: 0.5%; border: 1px solid black;">Column
        </div>
        <div id="menuRow" style="display:inline; padding: 0.5%; border: 1px solid black;">
            &nbsp;&nbsp;&nbsp;Row&nbsp;&nbsp;&nbsp;</div>
        <div id="menuSave" style="margin-top: 2.5%; padding: 0.5%; border: 1px solid black;">Save</div>
        <p></p>
    </div>
    <img id="stopImg" src="dist/assets/owl.video.play.png" />

    </div>

    <!-- <input type="file" webkitdirectory multiple> -->


    <script type="text/javascript">
        // "ChromeParameters": "C:\Program Files\Google\Chrome\Application\chrome.exe" --allow-file-access-from-files --user-data-dir="D:\ChromeDebug_ATY\AlbumOwl" --test-type --disable-web-security --start-fullscreen "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/index.html"
        // var loadingGif = "dist/assets/ajax-loader.gif"

        var owlMainElement = document.getElementById("owlMain");
        var owl = $("#owlMain");
        var imgOrderList = [];
        var imgErrorList = [];
        var currentImgNum = 0;
        var playStopFlag = "Play";      // "Play" or "Stop"

        var saveJsonGroup = {
            "dirPath": "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/",
            "albumPath": "Album/",
            "imgName": "Column",
            "imgSuffixes": ".jpg",
            "cycleTime": 20,
            "maxFileNum": 561,
            "currentMode": "Column"
        };

        $.ajax({
            url: "setting.json",
            // async: false,
            success: function (result) {
                saveJsonGroup.albumPath = result.albumPath;
                saveJsonGroup.imgName = result.imgName;
                saveJsonGroup.imgSuffixes = result.imgSuffixes;
                saveJsonGroup.cycleTime = result.cycleTime * 1;
                saveJsonGroup.maxFileNum = result.maxFileNum * 1;
                saveJsonGroup.currentMode = result.currentMode;
                // console.log(result);
                // console.log(saveJsonGroup);
            }
        });

        $(document).ready(function () {
            saveJsonGroup.imgName = saveJsonGroup.currentMode
            // random img
            for (var i = 1; i <= saveJsonGroup.maxFileNum; i++) {
                imgOrderList[i] = i;
            }
            var ramdonSeed = new Date().getTime();
            imgOrderList.sort(function () { return 0.5 - Math.random(); });
            // console.log(imgOrderList);

            // add img element
            for (var i = 1; i <= saveJsonGroup.maxFileNum; i++) {
                var imgElementCreat = new Image();
                imgElementCreat.id = "img" + i;
                imgElementCreat.src =
                    saveJsonGroup.albumPath
                    + saveJsonGroup.currentMode
                    + "/"
                    + saveJsonGroup.imgName
                    + " ("
                    + imgOrderList[i - 1]
                    + ")"
                    + saveJsonGroup.imgSuffixes;
                imgElementCreat.onclick = function () {
                    if (playStopFlag == "Play") {
                        playStopFlag = "Stop";
                        document.getElementById("stopImg").hidden = false;
                        owl.trigger("stop.owl.autoplay");
                        // console.log(imgErrorList);
                        // for (var i = 0; i < imgErrorList.length; i++) {
                        //     console.log(imgErrorList[i]);
                        //     owl.trigger("remove.owl.carousel", [imgErrorList[i] - 1]);
                        // }
                        // owl.trigger("refresh.owl.carousel");
                    }
                    else {
                        playStopFlag = "Play";
                        document.getElementById("stopImg").hidden = true;
                        owl.trigger("play.owl.autoplay", [saveJsonGroup.cycleTime * 1000]);
                        document.getElementById("settingMenu").hidden = true;
                    }
                    // console.log("clicked: " + playStopFlag);
                };
                imgElementCreat.onerror = function () {
                    imgErrorList.push(this.id.replace("img", "") * 1);
                    // console.log(imgErrorList);
                    this.parentNode.parentNode.removeChild(this.parentNode);
                };
                owlMainElement.appendChild(imgElementCreat);
            }

            // set height with window
            owlMainElement.style.maxHeight =
                document.documentElement.clientHeight + "px";
            owlMainElement.style.height =
                document.documentElement.clientHeight + "px";

            // menu display
            document.getElementById("settingMenu").hidden = true;
            document.getElementById("albumPath").value = saveJsonGroup.albumPath;
            document.getElementById("imgName").value = saveJsonGroup.imgName;
            document.getElementById("imgSuffixes").value = saveJsonGroup.imgSuffixes;
            document.getElementById("cycleTime").value = saveJsonGroup.cycleTime;
            document.getElementById("maxFileNum").value = saveJsonGroup.maxFileNum;
            if (saveJsonGroup.currentMode == "Column") {
                document.getElementById("menuColumn").style.backgroundColor = "#d1ffff";
            }
            else if (saveJsonGroup.currentMode == "Row") {
                document.getElementById("menuRow").style.backgroundColor = "#d1ffff";
            }

            document.getElementById("stopImg").onclick = function () {
                document.getElementById("settingMenu").hidden = false;
            };

            document.getElementById("menuColumn").onclick = function () {
                saveJsonGroup.currentMode = "Column";
                saveJsonGroup.imgName = "Column";
                document.getElementById("imgName").value = "Column";
                document.getElementById("menuColumn").style.backgroundColor = "#d1ffff";
                document.getElementById("menuRow").style.backgroundColor = "#ffffff";
            };
            document.getElementById("menuRow").onclick = function () {
                saveJsonGroup.currentMode = "Row";
                saveJsonGroup.imgName = "Row";
                document.getElementById("imgName").value = "Row";
                document.getElementById("menuRow").style.backgroundColor = "#d1ffff";
                document.getElementById("menuColumn").style.backgroundColor = "#ffffff";
            };
            document.getElementById("menuSave").onclick = function () {
                // not null
                if (
                    !document.getElementById("albumPath").value
                    || !document.getElementById("imgName").value
                    || !document.getElementById("imgSuffixes").value
                    || !document.getElementById("cycleTime").value
                    || !document.getElementById("maxFileNum").value
                ) {
                    alert("Input cannot be empty!");
                }
                else {
                    saveJsonGroup.albumPath = document.getElementById("albumPath").value;
                    saveJsonGroup.imgName = document.getElementById("imgName").value;
                    saveJsonGroup.imgSuffixes = document.getElementById("imgSuffixes").value;
                    saveJsonGroup.cycleTime = document.getElementById("cycleTime").value;
                    saveJsonGroup.maxFileNum = document.getElementById("maxFileNum").value;
                    // console.log(saveJsonGroup);

                    if (typeof saveJsonGroup === 'object') {
                        saveJsonGroup = JSON.stringify(saveJsonGroup, undefined, 4)
                    }
                    var blob = new Blob([saveJsonGroup], { type: 'text/json' });
                    var a = document.createElement('a');
                    a.download = "setting.json";
                    a.href = window.URL.createObjectURL(blob);
                    a.dataset.downloadurl = ['text/json', a.download, a.href].join(':');
                    a.click();

                    document.getElementById("settingMenu").hidden = true;
                    document.getElementById("stopImg").hidden = true;
                    owl.trigger('play.owl.autoplay', [saveJsonGroup.cycleTime * 1000]);
                }
            };

            // start Owl Carousel
            owl.owlCarousel({
                items: 1,
                loop: false,
                mouseDrag: false,
                autoplay: true,
                autoplayTimeout: saveJsonGroup.cycleTime * 1000,
                autoplayHoverPause: true,
                nav: false,
                dots: false,
                center: true,
                lazyLoad: true,
            });
            document.getElementById("stopImg").hidden = true;
            owl.trigger('play.owl.autoplay', [saveJsonGroup.cycleTime * 1000]);

            // mouse wheel action
            owl.on("mousewheel", ".owl-stage", function (e) {
                if (e.deltaY > 0) {
                    owl.trigger("prev.owl");
                } else {
                    owl.trigger("next.owl");
                }
                e.preventDefault();
            });

            // owl.on("refreshed.owl.carousel", function () {
            //     console.log("Refreshed");
            //     location.reload();
            // });

            owl.on("translated.owl.carousel", function () {
                // console.log("Finished one img");
                // console.log(imgErrorList);
                currentImgNum++;
                console.log(saveJsonGroup.maxFileNum - imgErrorList.length - currentImgNum);
                if ((saveJsonGroup.maxFileNum - imgErrorList.length - currentImgNum) <= 0) {
                    location.reload();
                    // owl.trigger("refresh.owl.carousel");
                }
            });
        });

        $(window).resize(function () {
            // alert("Changed");
            // set height with window
            owlMainElement.style.maxHeight =
                document.documentElement.clientHeight + "px";
            owlMainElement.style.height =
                document.documentElement.clientHeight + "px";
        });


        // function isSupportFileApi() {
        //     if (window.File && window.FileList && window.FileReader && window.Blob) {
        //         return true;
        //     }
        //     return false;

    </script>

</body>

</html>
  • setting.json

    {
      "dirPath": "file:///E:/Projects/ATY/ProjectsOfHTML/Done/AlbumOwl/",
      "albumPath": "Album/",
      "imgName": "Column",
      "imgSuffixes": ".jpg",
      "cycleTime": "30",
      "maxFileNum": "561",
      "currentMode": "Column"
    }

index.html(V1_01_220611)

<!doctype html>
<html>

<head>
    <meta charset="UTF-8" />
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>AlbumOwl - ATY</title>

    <link rel="stylesheet" href="dist/assets/owl.carousel.min.css" />
    <link rel="stylesheet" href="dist/assets/owl.theme.default.min.css" />
    <script src="dist/vendors/jquery.min.js"></script>
    <script src="dist/owl.carousel.min.js"></script>

    <script src="dist/vendors/jquery.mousewheel.min.js"></script>

    <style>
        body,
        #owlMain,
        #owlMain div,
        #owlMain a,
        #owlMain img {
            margin: 0;
            width: 100%;
            height: 100%;
            text-align: center;
            overflow: hidden;
        }

        #owlMain img {
            /* width: auto; */
            object-fit: cover;
            height: 103%;
        }
    </style>

</head>

<body>
    <div id="owlMain" class="owl-carousel"></div>
    <img id="stopImg" src="dist/assets/owl.video.play.png" style="position:absolute; top:0; left:0; z-index: 999;" />

    <!-- <input type="file" webkitdirectory multiple> -->


    <script>
        // var loadingGif = "dist/assets/ajax-loader.gif"
        var albumPath = "Album/Column/";
        var imgSuffixes = ".jpg";

        var owlMainElement = document.getElementById("owlMain");
        var owl = $("#owlMain");
        // var cycleTime = 1 * 1000;
        // var cycleTime = 5 * 1000;
        var cycleTime = 30 * 1000;
        var maxFileNum = 561;
        var imgOrderList = [];
        var playStopFlag = 1;

        $(document).ready(function () {
            // random img
            for (var i = 1; i <= maxFileNum; i++) {
                imgOrderList[i] = i;
            }
            var ramdonSeed = new Date().getTime();
            imgOrderList.sort(function () { return 0.5 - Math.random(); });
            // console.log(imgOrderList);

            // add img element
            for (var i = 1; i <= maxFileNum; i++) {
                var imgElementCreat = new Image();
                imgElementCreat.src =
                    albumPath
                    + "Column ("
                    + imgOrderList[i - 1]
                    + ")"
                    + imgSuffixes;
                imgElementCreat.onclick = function () {
                    if (playStopFlag == 1) {
                        playStopFlag = 0;
                        document.getElementById("stopImg").hidden = false;
                        owl.trigger("stop.owl.autoplay");
                    }
                    else {
                        playStopFlag = 1;
                        document.getElementById("stopImg").hidden = true;
                        owl.trigger("play.owl.autoplay", [cycleTime]);
                    }
                    // console.log("clicked: " + playStopFlag);
                };
                imgElementCreat.onerror = function () {
                    // console.log(this.parentNode);
                    this.parentNode.parentNode.removeChild(this.parentNode);
                }
                owlMainElement.appendChild(imgElementCreat);
            }

            // start Owl Carousel
            owl.owlCarousel({
                items: 1,
                loop: true,
                mouseDrag: false,
                autoplay: true,
                autoplayTimeout: cycleTime,
                autoplayHoverPause: true,
                nav: false,
                dots: false,
                center: true,
            });
            document.getElementById("stopImg").hidden = true;
            owl.trigger('play.owl.autoplay', [cycleTime]);

            // set height with window
            owlMainElement.style.maxHeight =
                document.documentElement.clientHeight + "px";
            owlMainElement.style.height =
                document.documentElement.clientHeight + "px";

            // mouse wheel action
            owl.on("mousewheel", ".owl-stage", function (e) {
                if (e.deltaY > 0) {
                    owl.trigger("prev.owl");
                } else {
                    owl.trigger("next.owl");
                }
                e.preventDefault();
            });
        });


        // function isSupportFileApi() {
        //     if (window.File && window.FileList && window.FileReader && window.Blob) {
        //         return true;
        //     }
        //     return false;
        // }

    </script>

</body>

</html>

所有文件打包

评论已关闭

Loading...
Fullscreen Image