showDialog新组件-showDialog3

主要用来在PC端弹层,弹出内容,图片,视频等:

  • 弹出动画可以多种选择;
  • 遮罩透明度、颜色等可自定义;
  • 支持弹出、关闭callback;
  • 支持弹出超长(弹窗的高度大于视窗高度)的内容,组件会判断固定弹窗;

与旧的版本,这个组件有哪些改变:

  • 新的版本,和旧的弹出层组件没有任何关联;
  • 使用了比较激进的CSS3动画,弹出样式后续可以自定义
  • 淘汰了一些旧的API(如resize,使用如ResizeObserver等接口开发
  • 使用visible显示,不用display:none,默认ESC或点击背景关闭
  • 在使用上更加简洁,使用data-绑定目标;
  • 使用了比较激进的写法,所以该组件不支持IE 10以及以下的浏览器
  • 其他代码上的适应时代的优化;

有考虑未来可能会加入的,随缘:

  • 模块化支持;
  • 用户自定义CSS3动画,如增加canvas背景、svg动画等;
  • 弹出内容不用放既定容器等;

[warning] 注意

  • 新旧版本不兼容;

showDialog3组件无须依赖

组件CDN

<script src="//game.gtimg.cn/images/js/showdialog3/index.js"></script>

弹出内容

<!--这个id:dialog--box 自定义,但必须存在;class = 'tg__show__dialog' 不能改动;不用设置display:none--->

<div class="tg__show__dialog" id="dialog--box">
    <div class="dialog__content">

        <!---弹出内容需要放在这里面,其中 class="tg__show__dialog"  class="dialog__content" 不要改动,id自定义。--->

    </div>
</div>

关闭按钮

<!---- data-show__dialog-close 这个是关键,可选,组件会自动绑定一个关闭弹窗的事件-->>
<button data-show__dialog-close>关闭</button>

上手实践

快速上手

<script>
    (function(){

        //声明需要弹出的内容
        let firstBlood = document.querySelector('#dialog--box');

        //实例一个方法
        let showDialog = new DialogShow(firstBlood);

        //找个按钮启动方法
        let btnShowDialog = document.querySelector('#dialog--button');

        //绑定方法
        btnShowDialog.addEventListener('click',showDialog.toggle.bind(showDialog));

        //收功

    })();
</script>

自定义 - 所有选项

<script>
constructor(el,options){
    //code
}
</script>
////////////////////////////////////////////////////////////////////////////////////参数
<script>
el,                                             //弹出的dom对象;
option:{
    overlayColor : 'rgba(0, 0, 0, 0.6);',        //遮罩颜色,和透明度,使用rgba格式(红,绿,蓝,透明度0~1),即rgba(red,green,blue,alpha),
    effectType : '0',                           // 弹出CSS3的动画类型,目前有 0 ~ 5种;
    onOpenDialog: function(){return false;},    // 弹出时候callback
    onCloseDialog: function(){return false;}    // 关闭时候callback
}
</script>
//////////////////////////////////////////////////////////////////////////////////例子
<script>
const openFn = () =>{
    document.title = 'opening';
}

const closeFn = () =>{
    document.title = 'closed';
}

let dialogModule = document.querySelector('#dialog--box');
let _dialog = new DialogShow(
dialogModule,
{
overlayColor:'rgba(140, 48, 63, 0.6)',
effectType:'3',
onOpenDialog: openFn,
onCloseDialog: closeFn
});

document.querySelector('#aBtn').addEventListener('click',_dialog.toggle.bind(_dialog));

</script>

其它

<script>
//如何像之前一样定义一个方法?

TGDialogS = (function(){
    let dialogModule = document.querySelector('#cbox');
    let _dialog = new DialogShow(
        dialogModule,
        {
            overlayColor:'rgba(140, 48, 63, 0.6)',
            effectType:'0',

        });
        document.querySelector('#cbtn').addEventListener('click',_dialog.toggle.bind(_dialog));

        return{
            dialog:function(){
                _dialog.toggle.bind(_dialog)();
            }
        }
})();
</script>
//////////////////////////////////////////////////////////////////////////////////
很长的弹出层?
...
effectType:'5'
...

随屏幕滚动的弹出层?
...
effectType:'5'
...

一个列表点击实践


      //按钮列表

        <button class="btn" data-video='k0975i9q2zd'>枯藤</button>
        <button class="btn" data-video='r0972qti7rn'>老树</button>
        <button class="btn" data-video='r0972wzu6o5'>昏鸦</button>
        <button class="btn" data-video='b0972kca08m'>小桥</button>
        <button class="btn" data-video='g09721o4p6i'>流水</button>

        <script>
        //弄个通用方法PlayVideoDialog.show();
        PlayVideoDialog = (function(){
            //播放视频
            function Play(v){
                let player = new Txplayer({containerId: 'videowap',vid:v,width: '1070',height: '600',autoplay: true});
            }
            //弹出层关闭,清空播放器;
            function Clear(){document.querySelector('#videowap').innerHTML=''}
            //弹出层id;
            let dialogModule = document.querySelector('#vbox');
            //实例一个弹出层,列表里面全部使用这个方法,但这里并没有定义onOpenDialog,因为需要在绑定事件的方法里面获取data-video里面的视频id;
            let _dialog = new DialogShow(dialogModule,{effectType:'4',onCloseDialog:Clear});

                return{
                    //弹出方法;
                    show:function(v){
                        //单独定义每个弹出行为里面的视频播放,同理,_dialog.options里面的参数都可以定义{overlayColor,effectType,onOpenDialog,onCloseDialog}
                        _dialog.options.onOpenDialog = function(){Play(v)};
                        //弹出方法
                        _dialog.toggle.bind(_dialog)();
                    }
                }
        })();


        (function(){
            //视频播放按钮列表
            let videoLists = document.querySelectorAll('[data-video]');
            //为每个按钮绑定一个点击事件;
                videoLists.forEach(function(item){
                    let self = item;
                    item.addEventListener('click',function(){
                        PlayVideoDialog.show(self.dataset.video)
                    })
                });
        //搞定
        })();
    </script>

DEMO示例;

results matching ""

    No results matching ""