javascript实现的一个信息提示的小功能/

//什么状况。CSDN的排版怎么这么多状况,还是本人太次?调整几次都没弄好。最后一遍了……

最近由于公司业务问题。须要做一些面向公众的平台,于是对UI要求会高一点,

对于传统的alert的这样的方式来提示用户操作错误显然会非常影响客户体验。于是做了一个小功能,来替代原本的alert。话不啰嗦,先上效果图。

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMDU3MTkxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" >

实现原理非常easy。利用js生成一个div。然后在须要提示的时候从top:0,的地方開始运动,运动到屏幕中间的时候等待一秒钟再往上隐没,连续点击多次的话就上第一个图一样。会有些重叠。在提示用户错误操作方面的体验还是能够。以下就放上源代码:

调用起来也非常方便,引入后调用showTip(内容)方法就可以,本例中用了多层渐变。可是在IE8 的时候显示仅仅有单层颜色,稍显单调。(注:后面几个方法是本例依赖的运动框架,为方面调用才一起放上来了)

/**
 * Created by zhou on 2014-12-09.
 */
function showTip(content){
    var left = parseInt((document.body.clientWidth - 300)/2);
    var top = parseInt((document.body.clientHeight - 50)/2);
    var tipDiv = document.createElement("div");
    tipDiv.className = "tip";
    tipDiv.innerHTML = content;

    if(!document.head){//IE8 不支持style.innerHTML的写法,所以。假设浏览器是IE8能够採用js赋属性的方法处理
        //document.head的写法不兼容IE8下面产品,所以这样的写法能够获取IE版本号是否在8下面,
        tipDiv.style.width = "300px";
        tipDiv.style.height = "50px";
        tipDiv.style.border = "1px solid blue";
        tipDiv.style.lineHeight = "50px";
        tipDiv.style.textAlign = "center";
        tipDiv.style.zIndex = "9999";
        tipDiv.style.position="absolute";
        tipDiv.style.top = 0;
        tipDiv.style.left = left +"px";
        tipDiv.style.backgroundColor = "#A793FF";

        tipDiv.style.filter="progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#3d69ff,endColorStr=white);}";

    }else{
//将属性写到CSS样式的优点在于:当某个属性在多个浏览器中兼容不一样的时候不用依据写js逻辑代码。
        var styleStr = ".tip{  width: 300px; height: 50px; border:1px solid blue; line-height: 50px;text-align: center;"+
            "z-index: 9999;  top:0; left:"+left+"px;filter:alpha(opacity=0); opacity:0.5;position: absolute;"+
            "background-color: #3d69ff; background: -webkit-linear-gradient(top, #3d69ff, #a793ff,#a793ff,#cac2ff,white);"+
            "background: -moz-linear-gradient(top, #3d69ff ,#a793ff,#a793ff,#cac2ff,white);"+
            "background: -ms-linear-gradient(top, #3d69ff, #a793ff,#a793ff,#cac2ff,white);"+
            "background: linear-gradient(top, #3d69ff, #a793ff,#a793ff, #cac2ff,white); "+
            "filter:progid:DXImageTransform.Microsoft.Gradient(gradientType=0,startColorStr=#3d69ff,endColorStr=white);} ";
        var style = document.createElement("style");
        style.innerHTML = styleStr;
        document.head.appendChild(style);
    }
    document.body.appendChild(tipDiv);
    doMove(tipDiv,{top:top,opacity:100},function(){
        setTimeout(function(){
            doMove(tipDiv,{top:0,opacity:0},function(){
//运动到top为0 的时候要注意将该组件删除。否则会造成大量垃圾,占用资源
                tipDiv.parentNode.removeChild(tipDiv);
            });
        },1000);
    });
}
function doMove(obj, oTarget, fn) {
    if (obj.timer) {
        clearInterval(obj.timer);
    }
    obj.timer = setInterval(function () {
        Move(obj, oTarget, fn)
    }, 10)
}

function Move(obj, oTarget, fn) {
    var iCur = 0;
    var arr = "";
    var bStop = true;
    for (arr in oTarget) {
        if (arr == "opacity") {
            //解决Google chrome不兼容问题(Google获取opacity会出现一些误差,透明度无法达到指定数值)
            var temp = parseFloat(getStyle(obj, 'opacity')) * 100;
            iCur = temp<oTarget[arr]?Math.ceil(temp):Math.floor(temp);
        } else {
            iCur = parseInt(getStyle(obj, arr));
        }
        if (isNaN(iCur)) {
            iCur = 0;
        }
        var speed = (oTarget[arr] - iCur) / 40;
        speed = speed > 0 ? Math.ceil(speed) : Math.floor(speed);
        if (oTarget[arr] != iCur) {
            bStop = false;
        }
        if (arr == "opacity") {
            obj.style.filter = "alpha(opacity:" + (iCur + speed) + ")";
            obj.style.opacity = (iCur + speed) / 100;
        } else {
            obj.style[arr] = iCur + speed + "px";
        }
    }
    if (bStop) {
        clearInterval(obj.timer);
        obj.timer = null;
        if (fn) {
            fn();
        }
    }
}
function getStyle(obj, property) {
    if (obj.currentStyle) {//For IE
        return obj.currentStyle[property];
    } else if (window.getComputedStyle) {//For FireFox and chrome
        propprop = property.replace(/([A-Z])/g, "-$1");
        propprop = property.toLowerCase();
        return document.defaultView.getComputedStyle(obj, null)[property];
    } else {
        return null;
    }
}
时间: 2024-10-14 09:43:47

javascript实现的一个信息提示的小功能/的相关文章

CSS在HTML底部有一个信息提示栏

在HTML页面的底部有一个固定的信息栏 <div id="rk_foot" style="position:fixed;bottom:0px;z-index:1000;background-color:rgb(221,221,221);background-attachment: scroll;width:100%;margin:20px 0px 0px 0px;padding:10px;"> 使用DIV CSS实现字体居中 div{text-align

最近写了一个红包雨的小功能,但感觉自己的js还有很多地方可以提高,望大神们可以帮忙指点一二

js部分 1 'use strict'; 2 function RedEnvelope(options){ 3 if(this === window){ 4 return new RedEnvelope(options); 5 } 6 var defaults = { 7 imgWidth:60,//红包的宽度 8 position:'absolute', 9 imgEnvSrc:'../images/game/redEnv/redEnv.png', 10 containerClass:'.re

[ExtJs5.1.0系列-第二天] 信息提示框组件&lt;Ext.MessageBox&gt;

在介绍ExtJs信息提示框组件之前,我们先来介绍一下ExtJs的组件配置. ExtJs组件通常有两种配置形式: (1) 用逗号分割的参数列表;  (2) 使用JSON对象作为组件提供配置信息.对于比较简单的配置一般采用逗号分隔的参数列表进行设置,对于较复杂的配置一般采用JSON对象的方式为组件提供配置信息. JSON简单介绍: JSON的全称是JavaScript Object Notation(JavaScript对象符号).JSON是一种结构化的,轻量级的,完全独立于语言的,基于文本的数据传

ECSHOP信息提示页面的跳转时间设置

ECSHOP商城的很多操作,都会出来一个信息提示页面,告知用户的操作结果,以及请用户选择下一步要去的页面,如果用户不选择,系统将自动跳转到一个页面,那么这个跳转时间在哪控制呢?? 例如,用户登录成功后,会跳出一个信息提示页面,提示您已经登录成功,如果您没选择区哪个页面,隔一段时间它将自动跳转到一个页面. 很多人认为这个时间是在程序文件里设置的,其实不是的. 下面说一下方法 打开 文件 /themes/default/message.dwt 找到下面代码 那个数字 3 就是跳转时间,将它改成别的数

javascript 跟随鼠标移动的提示框的一个小demo

下面提供一种跟随鼠标移动的提示框的思路,方便在以后工作中应用,主要是应用到鼠标移动产生的数值来进行移动提示框的定位... CSS代码   .box{height:100px;width:100px;background:orange;position:relative;margin:40px;} .move{height:20px;width:20px;background:red;position:absolute;left:0px;top:0px;display:none;} HTML代码

一个气泡提示的Javascript控件

某日,忽的想写个js小控件.功能很简单,就是可以在文本框下面显示一个气泡提示,如上图.图是Chrome里截来的,是Chrome原生的提示样式.只要在文本框启用『required』,提交时内容为空时就会出现如图提示. 首先第一步,该是要构建一个提示文字的HTML模型,那么弹出提示时就可以被重复构建了(如上图). <div class="megbox"> <div class="megbox_top"></div> <div c

使用Qtip2来开发功能强大的删除和信息提示功能

在线演示1 本地下载 前面的文章中我们介绍了超棒的20款javascript工具提示条(tooltips)类库,在这篇文章中我们曾经提到过Qtip2这个强大的jQuery工具提示插件,这个jQuery插件能够帮助你快速创建强大的工具提示(tooltip)功能.如果大家使用微博的话,肯定会经常类似如下的用户信息界面,这个界面使用的就是一个工具提示功能.使用Qtip2你也可以快速开发出类似的提示功能. 在接下来的内容中,我们将创建一个博客文章阅读页面,并且提供两个“按钮”来控制“删除”和“喜欢”,界

封装表单自定义错误信息。(阻止默认错误信息提示,添加自定义错误信息提示)

1 前台提交信息到后台,两种表单验证: 2 1,form 表单验证 3 2,ajax 无刷新页面提交 4 5 表单验证方法一般有: 6 1,浏览器端验证 7 2,服务器端验证 8 3,ajax验证 9 4,浏览器和服务器双重验证 10 11 html5表单新增类型: 12 email,url,number,range,data(date,month,week,time,datetime,datetime-local),search,color,tel等 13 ======== 14 重点:pat

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏

韩顺平_轻松搞定网页设计(html+css+javascript)_第34讲_js超级玛丽小游戏_学习笔记_源代码图解_PPT文档整理 分类: PHP 2012-12-12 15:01 4256人阅读 评论(0) 收藏 举报 文西马龙:http://blog.csdn.net/wenximalong/ 采用面向对象思想设计超级马里奥游戏人物(示意图) 怎么用通过按键,来控制图片的位置 这个小游戏,用面向对象会很方便,不用面向对象会很麻烦很麻烦,比如以后要讲解的坦克大战的游戏,要是用纯的面向过程或