【APICloud系列|29】dialogBox模塊(對話框)的實現

導讀:dialogBox 封裝了十一種款式的對話框,每一種款式都提供一個接口來調用,開發者可按照各個接口的樣式來自定義對話框上的文字、圖片、圖文等

把 dialogBox 模塊的 11 個樣式分別實現個簡單的效果,其中將 alert 方法做了兩個樣式,如果你覺得我寫的樣式夠醜,請不要噴我,因爲我是程序猿[呵呵了],如果你接受了就直接用到你的項目,否則自己再根據官方的文檔和結合自己的產品需求,來定義更多高大上的樣式。

接下來我拿幾個我常用的方法給大家簡單介紹下,其它的大家可以看看模塊的視頻效果以後,自己上手做做。

  • alert()
     

這個方法算是系統的 alert 與 confirm 的結合,這之上還可以添加 icon。

  • sendMessage()
     

顧名思義,此方法在 alert 的基礎之上追加了一個對話框,會調用中可以取到輸入的值。

  • scene()
     

此方法是一個特定場景下的 UI 彈出層,它包含可設置場景圖片、標題以及選項。

  • evaluation()
     

與 alert 類似,只不過將按鈕的排版做了修改。

  • raffle()
     

該方法算是 scene 與 alert 的結合,效果可見此模塊視頻演示。

  • receipt()
     

在很多場景中我們就會有,比如一些簡單到複雜的表單數據展示,通常這樣的佈局比較麻煩而繁瑣。這個方法就是由此而生呀,簡單配置下,就能夠達到目的。

  • tips()
     

其實我覺得這個方法除了和名字說的提示功能以外,還有 N 多的使用場景,所以大家別被方法的名稱給固定了使用的範圍。

  • actionMenu()
     

這個方法的 UI 與 shareAction 模塊類似,差別就是這個方法並沒有實際的功能,不過通常情況下系統的很多功能並不是我們的產品想要的,我們需要自定義 UI 和功能,所以這裏這個方法就起了大作用。

以上所有方法,我也都只是簡單的用了下,大家在使用此模塊的時候仔細看看文檔,畢竟是 UI 模塊,又要做到自定義,所以字段什麼的太多了,一不注意你就疏忽了什麼。在使用模塊時,任何一個按鈕點擊時都有返回對應的索引,然後我們就可以根據索引去做自己的邏輯。

項目結構:

config.xml

<?xml version="1.0" encoding="UTF-8"?>
<widget id="A6917801437242" version="0.0.1">
  <name>對話框的實現</name>
  <description></description>
  <author email="1978195254" href="https://blog.csdn.net/weixin_41937552">58DCDC</author>
  <content src="index.html"/>
  <preference name="pageBounce" value="false"/>
  <preference name="appBackground" value="rgba(0,0,0,0.0)"/>
  <preference name="windowBackground" value="rgba(0,0,0,0.0)"/>
  <preference name="frameBackgroundColor" value="rgba(0,0,0,0.0)"/>
  <preference name="hScrollBarEnabled" value="true"/>
  <preference name="vScrollBarEnabled" value="true"/>
  <preference name="autoLaunch" value="true"/>
  <preference name="fullScreen" value="false"/>
  <preference name="autoUpdate" value="true"/>
  <preference name="smartUpdate" value="false"/>
  <preference name="debug" value="true"/>
  <preference name="statusBarAppearance" value="true"/>
  <permission name="readPhoneState"/>
  <permission name="camera"/>
  <permission name="record"/>
  <permission name="location"/>
  <permission name="fileSystem"/>
  <permission name="internet"/>
  <permission name="bootCompleted"/>
  <permission name="hardware"/>
  <access origin="*"/>
</widget>

index.html

<html>
    <head>
        <meta charset="utf-8">
        <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1.0,user-scalable=0,width=device-width,initial-scale=1.0"/>
        <meta name="format-detection" content="tephone=no,email=no,date=no,address=no">
        <style type="text/css">
            html{ background-color: white; }
            header{  padding: 25px 0; }
            span {
                padding: 5px 15px;
                margin: 10px;
                display: inline-block;
                background-color: #e8e8e8;
            }
            .hover{ opacity: .4; }
        </style>
    </head>
    <body>
        <header>
            <h1>dialogBox</h1>
            <mark>
                使用前請詳細閱讀 文檔 使用規則
            </mark>
        </header>
        <span tapmode="hover" onclick="dialogBox_alert1()"> dialogBox_alert1 </span>
        <span tapmode="hover" onclick="dialogBox_alert2()"> dialogBox_alert2 </span>
        <span tapmode="hover" onclick="dialogBox_sendMessage()"> dialogBox_sendMessage </span>
        <span tapmode="hover" onclick="dialogBox_scene()"> dialogBox_scene </span>
        <span tapmode="hover" onclick="dialogBox_evaluation()"> dialogBox_evaluation </span>
        <span tapmode="hover" onclick="dialogBox_raffle()"> dialogBox_raffle </span>
        <span tapmode="hover" onclick="dialogBox_taskPlan()"> dialogBox_taskPlan </span>
        <span tapmode="hover" onclick="dialogBox_receipt()"> dialogBox_receipt </span>
        <span tapmode="hover" onclick="dialogBox_tips()"> dialogBox_tips </span>
        <span tapmode="hover" onclick="dialogBox_discount()"> dialogBox_discount </span>
        <span tapmode="hover" onclick="dialogBox_share()"> dialogBox_share </span>
        <span tapmode="hover" onclick="dialogBox_actionMenu()"> dialogBox_actionMenu </span>
</body>
</html>

<script type="text/javascript">
    var dialogBox;
    apiready = function(){
        dialogBox = api.require('dialogBox');
    }

function dialogBox_alert1() {
    dialogBox.alert({
        texts : {
            title : ' 確認',
            content : '您是遊客狀態,是否登錄?',
            leftBtnTitle : '取消',
            rightBtnTitle : '登錄'
        },
        styles : {
            bg : '#fff',
            corner : 6,
            w : 260,
            title : {
                marginT : 20,
                icon : 'widget://image/gou.png',
                iconSize : 32,
                titleSize : 18,
                titleColor : '#000'
            },
            content : {
                color : '#000',
                size : 16
            },
            left : {
                marginB : 15,
                marginL : 40,
                w : 40,
                h : 35,
                corner : 2,
                color : "#000",
                bg : '#fff',
                size : 16
            },
            right : {
                marginB : 15,
                marginL : 88,
                w : 40,
                h : 35,
                corner : 2,
                color : "#000",
                bg : '#fff',
                size : 16
            }
        },
        tapClose : true
    }, function(ret) {
        if (ret.eventType == 'left') {
            dialogBox.close({
                dialogName: 'alert'
            });
        }
    });
}

function dialogBox_alert2() {
    dialogBox.alert({
        texts: {
            content: '您關閉了小助手的消息提醒,店主妹妹因聯繫不到您哭暈在廁所!',
            leftBtnTitle: '默默拒絕',
            rightBtnTitle: '去開提醒'
        },
        styles: {
            bg: '#fff',
            corner: 6,
            w: 280,
            content: {
                color: '#000',
                size: 18
            },
            left: {
                marginB: 15,
                marginL: 30,
                w: 100,
                h: 40,
                corner: 20,
                color: "#fff",
                bg: '#CDCDCD',
                size: 16
            },
            right: {
                marginB: 15,
                marginL: 20,
                w: 100,
                h: 40,
                corner: 20,
                color: "#fff",
                bg: '#C087C0',
                size: 16
            }
        },
        tapClose: true
    }, function(ret) {
        if (ret.eventType == 'left') {
            dialogBox.close({
                dialogName: 'alert'
            });
        }
    });
}

function dialogBox_sendMessage() {
    dialogBox.sendMessage({
        texts: {
            title: '  您的暱稱:',
            hintText: '小明(點擊此處修改暱稱)',
            content: '親,送你一個80元大禮包,請查收!退訂請回復TD',
            leftBtnTitle: '取消',
            rightBtnTitle: '發送'
        },
        styles: {
            bg: '#fff',
            corner: 6,
            w: 260,
            title: {
                h: 40,
                show: {
                    marginL: 6,
                    titleSize: 14,
                    titleColor: '#000'
                },
                input: {
                    marginL: 6,
                    textSize: 14,
                    textColor: '#000'
                }
            },
            content: {
                color: '#000',
                size: 14
            },
            left: {
                marginB: 7,
                marginL: 40,
                w: 60,
                h: 35,
                corner: 2,
                bg: '#fff',
                color: "#000",
                size: 16
            },
            right: {
                marginB: 7,
                marginL: 55,
                w: 60,
                h: 35,
                corner: 2,
                bg: '#fff',
                color: "#000",
                size: 16
            }
        },
        tapClose: true
    }, function(ret) {
        if (ret.eventType == 'left') {
            dialogBox.close({
                dialogName: 'sendMessage'
            });
        }
    });
}

function dialogBox_scene() {
    dialogBox.scene({
        rect: {
            w: 260,
            h: 410
        },
        texts: {
            title: '猖狂的小偷',
            content: '火車售票處前的隊伍蜿蜒縱橫,旁邊一小夥一邊張望,一邊將手伸向前面買票人的口袋,啊,是小偷!'
        },
        styles: {
            bg: '#fff',
            corner: 6,
            title: {
                bg: '#333',
                h: 44,
                size: 16,
                color: '#7E92DE'
            },
            sceneImg: {
                h: 133,
                path: 'widget://image/row.jpg'
            },
            content: {
                color: '#7E92DE',
                size: 14
            },
            cell: {
                bg: '#fff',
                h: 40,
                text: {
                    color: '#7E92DE',
                    size: 16
                }
            }
        },
        optionDatas: [{
            text: '1、拿出手機偷拍'
        }, {
            text: '2、見義勇爲抓小偷'
        }, {
            text: '3、大聲提醒買票的人'
        }],
        tapClose: true
    }, function(ret, err) {
        if (ret) {
            alert(JSON.stringify(ret));
        } else {
            alert(JSON.stringify(err));
        }
    });
}

function dialogBox_evaluation() {
    dialogBox.evaluation({
        styles: {
            bg: '#fff',
            corner: 6,
            w: 260,
            title: {
                marginT: 20,
                size: 16,
                color: '#000',
                bold: true
            },
            content: {
                marginT: 20,
                color: '#111',
                size: 14
            },
            buttons: [{
                marginB: 0,
                marginL: 0,
                w: 260,
                h: 35,
                bg: '#fff',
                color: '#007FFF',
                size: 16
            }, {
                marginB: 10,
                marginL: 0,
                w: 260,
                h: 35,
                bg: '#fff',
                color: '#007FFF',
                size: 16
            }]
        },
        texts: {
            title: '達令的老闆娘撒嬌嘍',
            content: '客官,您留步,給我個好評好嗎?嗯嗯!不然鹿董回來一生氣,他,他打我~5555',
            buttons: [{
                text: '看到家暴,殘忍的飄過~'
            }, {
                text: '這麼可憐,就給個五星好評吧'
            }]
        },
        tapClose: true
    }, function(ret, err) {
        if (ret) {
            alert(JSON.stringify(ret));
        } else {
            alert(JSON.stringify(err));
        }
    });
}

function dialogBox_raffle() {
    dialogBox.raffle({
        texts: {
            title: '恭喜你',
            mainText: '抽中一個獎盃',
            subText: '這就中了,還有什麼你做不到',
            leftTitle: '收入囊中',
            rightTitle: '告訴好友'
        },
        styles: {
            bg: '#fff',
            corner: 6,
            w: 260,
            title: {
                size: 18,
                color: '#000'
            },
            icon: {
                marginT: 20,
                w: 80,
                h: 80,
                iconPath: 'widget://image/bei.jpg'
            },
            main: {
                marginT: 20,
                color: '#636363',
                size: 16
            },
            sub: {
                marginT: 8,
                color: '#999999',
                size: 14
            },
            left: {
                marginB: 10,
                marginL: 8,
                w: 90,
                h: 35,
                corner: 2,
                bg: '#fff',
                color: '#007FFF',
                size: 14
            },
            right: {
                marginB: 10,
                marginL: 62,
                w: 90,
                h: 35,
                corner: 2,
                bg: '#fff',
                color: '#007FFF',
                size: 14
            }
        },
        tapClose: true
    }, function(ret, err) {
        if (ret) {
            alert(JSON.stringify(ret));
        } else {
            alert(JSON.stringify(err));
        }
    });
}

function dialogBox_taskPlan() {
    dialogBox.taskPlan({
        rect: {
            w: 280
        },
        texts: {
            mainTitle: '昨天玩的不夠努力哦',
            subTitle: '今天沒有獲得任務次數獎勵呢',
            content: [{
                text: '今日賺貓鈔任務總次數:3次'
            }, {
                text: '3次(基礎)+ 0次(獎勵)'
            }],
            btnTitle: '開始做任務'
        },
        styles: {
            bg: '#fff',
            corner: 6,
            main: {
                marginT: 20,
                color: '#636363',
                size: 18,
                bold: true,
            },
            sub: {
                marginT: 8,
                color: '#999999',
                size: 16,
            },
            content: [{
                bg: '#FFD249',
                marginT: 10,
                marginL: 16,
                w: 250,
                h: 30,
                align: 'center',
                color: '#BC6504',
                size: 17
            }, {
                bg: '#FFEABF',
                marginT: 0,
                marginL: 16,
                w: 250,
                h: 40,
                align: 'center',
                color: '#EDB56A',
                size: 16
            }],
            ok: {
                marginB: 10,
                marginL: 16,
                w: 250,
                h: 44,
                bg: '#ED1C43',
                color: '#FFF',
                size: 16
            }
        },
        tapClose: true
    }, function(ret) {
        if (ret.eventType == 'ok') {
            dialogBox.close({
                dialogName: 'taskPlan'
            });
        }
    });
}

function dialogBox_receipt() {
    dialogBox.receipt({
        rect: {
            w: 300,
            h: 380
        },
        items: [{
            key: '起步價',
            value: '0.00'
        }, {
            key: '4.23公里',
            value: '6.37'
        }, {
            key: '15.58分鐘',
            value: '3.9'
        }, {
            key: '小計',
            value: '¥10.27'
        }, {
            key: '優惠',
            value: '(3.49)'
        }, {
            key: '已收費',
            value: ''
        }, {
            key: '[email protected]',
            value: '¥6.78'
        }],
        texts: {
            title: '人民優步 + 收據',
            cancel: 'CLOSE'
        },
        styles: {
            bg: '#FFF',
            corner: 6,
            title: {
                textColor: '#000',
                textSize: 18,
                marginT: 10
            },
            topBorder: {
                borderColor: '#000',
                borderWidth: 2,
                marginT: 20
            },
            listHeight: 270,
            item: {
                textColor: '#000',
                textSize: 14,
                marginL: 10,
                marginT: 15,
                marginB: 5,
                bgColor: '#FFF'
            },
            bottomBorder: {
                borderColor: '#000',
                borderWidth: 2,
            },
            cancel: {
                textSize: 18,
                textColor: '#000',
                marginT: 7,
                highlight: '#fff'
            }
        },
        tapClose: true
    }, function(ret, err) {
        if (ret.eventType == 'cancel') {
            dialogBox.close({
                dialogName: 'receipt'
            });
        }
    });
}

function dialogBox_tips() {
    dialogBox.tips({
        rect: {
            w: 300
        },
        texts: {
            title: '3天免單上班的祕訣...',
            content: '優步全新乘客邀請計劃限時上線!每成功邀請一個新小夥伴首次使用優步,雙方賬戶均享3次免費行程(每次最高減免10元,中國大陸適用)'
        },
        buttons: [{
            normal: 'widget://image/weibo.png',
            text: '微博'
        }, {
            normal: 'widget://image/mes.png',
            text: '短信'
        }, {
            normal: 'widget://image/em.png',
            text: '郵箱'
        }],
        styles: {
            bg: '#FFF',
            corner: 6,
            topImage: {
                path: 'widget://image/car.png',
                w: 300,
                h: 150
            },
            title: {
                color: '#000',
                size: 18,
                marginT: 35
            },
            content: {
                color: '#000',
                size: 15,
                marginT: 15
            },
            border: {
                color: '#eee',
                width: 2,
                marginT: 10
            },
            buttons: [{
                iconSize: 32,
                textColor: '#000',
                textSize: 12,
                marginT: 15
            }, {
                iconSize: 32,
                textColor: '#000',
                textSize: 12,
                marginT: 15
            }, {
                iconSize: 32,
                textColor: '#000',
                textSize: 12,
                marginT: 15
            }]
        },
        tapClose: true
    }, function(ret) {
        alert(JSON.stringify(ret));
    });
}

function dialogBox_discount() {
    dialogBox.discount({
        rect: {
            w: 280,
            h: 335
        },
        styles: {
            bg: '#fff',
            corner: 6,
            image: {
                path: 'widget://image/dis.jpg',
                marginB: 120
            },
            cancel: {
                icon: 'widget://image/del.png',
                marginB: 40,
                w: 30,
                h: 30
            }
        },
        tapClose: true
    }, function(ret) {
        if (ret.eventType == 'cancel') {
            dialogBox.close({
                dialogName: 'discount'
            });
        }
    });
}

function dialogBox_share() {
    dialogBox.share({
        rect: {
            w: 300,
            h: 300
        },
        items: [{
            text: '微信朋友圈',
            icon: 'widget://image/friend.png'
        }, {
            text: '微信好友',
            icon: 'widget://image/weifriend.png'
        }, {
            text: '微博',
            icon: 'widget://image/weibo64.png'
        }, {
            text: 'QQ好友',
            icon: 'widget://image/QQ.png'
        }, {
            text: 'QQ空間',
            icon: 'widget://image/Qzone.png'
        }, {
            text: '複製鏈接',
            icon: 'widget://image/copy.png'
        }],
        styles: {
            bg: '#FFF',
            corner: 6,
            column: 3,
            horizontalSpace: 32,
            verticalSpace: 32,
            itemText: {
                color: '#000',
                size: 15,
                marginT: 20
            },
            itemIcon: {
                size: 54
            }
        },
        tapClose: true
    }, function(ret) {
        alert(JSON.stringify(ret));
    });
}   

function dialogBox_actionMenu() {
    dialogBox.actionMenu({
        rect: {
            h: 200
        },
        texts: {
            cancel: '取消'
        },
        items: [{
            text: '微信朋友圈',
            icon: 'widget://image/friend.png'
        }, {
            text: '微信好友',
            icon: 'widget://image/weifriend.png'
        }, {
            text: '微博',
            icon: 'widget://image/weibo64.png'
        }, {
            text: 'QQ好友',
            icon: 'widget://image/QQ.png'
        }, {
            text: 'QQ空間',
            icon: 'widget://image/Qzone.png'
        }, {
            text: '複製鏈接',
            icon: 'widget://image/copy.png'
        }],
        styles: {
            bg: '#FFF',
            corner: 6,
            column: 4,
            itemText: {
                color: '#000',
                size: 14,
                marginT: 10
            },
            itemIcon: {
                size: 54
            },
            cancel: {
                bg: '#fff',
                color: '#333',
                h: 55,
                size: 14
            }
        },
        tapClose: true
    }, function(ret) {
        alert(JSON.stringify(ret));
    });
}
</script>

 完整代碼下載地址:https://download.csdn.net/download/weixin_41937552/13993289

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章