zoukankan      html  css  js  c++  java
  • html5悬浮球效果

    自己想做一个自己的网站,觉得自适应的效果会好一点,但是放到手机端的话,菜单显示是个问题。所以自己试着写了一个悬浮球菜单的效果。

    好了,上代码。

    这里有四个文件要用:

    jqurey.js//因为基于jq做的。所以这里要引用js文件。我引用的是jquery-1.8.2.js

    PublicJs.js

    主要是判断是否是手机端,来确定是使用点击或触摸事件用的

     1 var PublicJs = {};
     2 PublicJs.IsPhone = function () {//判断是否是手机浏览器
     3     try {
     4         if (/Android|webOS|iPhone|iPod|BlackBerry/i.test(navigator.userAgent)) {
     5             return true;
     6         } else {
     7             return false;
     8         }
     9     } catch (e) {
    10         return false;
    11     }
    12 }
    13 //鼠标事件
    14 PublicJs.Mouse = {
    15     Down: (PublicJs.IsPhone() ? "touchstart" : "mousedown"),
    16     Move: (PublicJs.IsPhone() ? "touchmove" : "mousemove"),
    17     Up: (PublicJs.IsPhone() ? "touchend" : "mouseup"),
    18 };
    19 //鼠标移动
    20 PublicJs.Move = function (e) {
    21     var move = { x: 0, y: 0 };
    22     var _e = e.touches ? e : window.event;
    23     if (PublicJs.IsPhone()) {
    24         try {
    25             // evt.preventDefault(); //阻止触摸时浏览器的缩放、滚动条滚动等
    26             var touch = _e.touches[0]; //获取第一个触点
    27             move.x = Number(touch.pageX); //页面触点X坐标
    28             move.y = Number(touch.pageY); //页面触点Y坐标
    29         } catch (e) {
    30             move.x = _e.screenX;
    31             move.y = _e.screenY;
    32         }
    33     }
    34     else {
    35         move.x = e.screenX;
    36         move.y = e.screenY;
    37     }
    38     return move;
    39 };
    PublicJs.js

    SuspendedBall.js

    这个是悬浮球的主体方法

      1 //悬浮球
      2 var SuspendedBall = {
      3     ShowWidth: 500,//显示悬浮球的页面宽度
      4     //添加悬浮球 参数集合可中包含有 top、left、scc、class四个属性
      5     Add: function (obj) {
      6         if ($(".SuspendedBall").length == 0) {
      7             $("body").append("<div class="SuspendedBall"><div></div></div>")
      8             $("body").append("<div class="BallBox"><div class="Bg"></div><div class="BallBoxInfo"></div></div>")
      9         }
     10         if (obj) {
     11             var _this = $(".SuspendedBall");
     12             if (typeof (obj.top) != "undefined") {
     13                 _this.offset({ top: obj.top });
     14             }
     15             if (typeof (obj.left) != "undefined") {
     16                 _this.offset({ left: obj.left });
     17             }
     18             if (typeof (obj.css) != "undefined") {
     19                 _this.css(obj.css);
     20             }
     21             if (typeof (obj.class) != "undefined") {
     22                 _this.addClass(obj.class);
     23             }
     24         }
     25     },
     26     //控制悬浮球移动,显示的方法 其中UpFun是指的当触摸或鼠标抬起的时候的执行的方法
     27     Move: function (UpFun) {//第一个参数是鼠标抬起的事件触发,第二个参数是创建的时候添加的其他事件
     28         var x = 0, y = 0;
     29         var sx = 0, sy = 0;
     30         var mx = 0, my = 0;
     31         var isDown = false;
     32         var isMove = false;
     33         $(window).resize(function () {
     34             if ($(window).width() < SuspendedBall.ShowWidth) {
     35                 $(".SuspendedBall").show();
     36                 $(".BallBox").hide();
     37             }
     38             else {
     39                 $(".SuspendedBall").hide();
     40                 $(".BallBox").hide();
     41             }
     42         })
     43         $("body").bind(PublicJs.Mouse.Down, function (e) {
     44             if ($(window).width() < SuspendedBall.ShowWidth) {
     45                 $(".SuspendedBall").show();
     46                 $(".BallBox").hide();
     47             }
     48         });
     49         $(".BallBox").bind(PublicJs.Mouse.Down, function (e) {
     50             if ($(window).width() < SuspendedBall.ShowWidth) {
     51                 $(".SuspendedBall").show();
     52                 $(".BallBox").hide();
     53             }
     54             return false;//取消元素事件向下冒泡
     55         });
     56         $(".SuspendedBall").bind(PublicJs.Mouse.Down, function (e) {
     57             //#region 去除原有的动画样式
     58             var right = $(window).width() - $(this).width();
     59             var bottom = $(window).height() - $(this).height();
     60             if ($(this).hasClass("ToLeft")) {
     61                 $(this).removeClass("ToLeft").offset({ left: 0 });
     62             }
     63             else if ($(this).hasClass("ToTop")) {
     64                 $(this).removeClass("ToTop").offset({ top: 0 });
     65             }
     66             else if ($(this).hasClass("ToBottom")) {
     67                 $(this).removeClass("ToBottom").offset({ top: bottom });
     68             }
     69             else if ($(this).hasClass("ToRight")) {
     70                 $(this).removeClass("ToRight").offset({ left: right });
     71             }
     72             //#endregion-----
     73             isDown = true;
     74             x = $(this).offset().left;
     75             y = $(this).offset().top;
     76             var move = PublicJs.Move(e);
     77             sx = move.x;
     78             sy = move.y;
     79             return false;//取消元素事件向下冒泡
     80         });
     81         $(".SuspendedBall").bind(PublicJs.Mouse.Move, function (e) {
     82             if (isDown) {
     83                 var move = PublicJs.Move(e);
     84                 mx = move.x - sx;//获取鼠标移动了多少
     85                 my = move.y - sy;//获取鼠标移动了多少
     86 
     87                 var movemunber = 5;//当触摸的时候移动像素小于这个值的时候代表着不移动
     88                 if ((mx) > movemunber || (0 - mx) > movemunber || (my) > movemunber || (0 - my) > movemunber) {
     89                     isMove = true;
     90                 }
     91                 var _top = (y + my), _left = (x + mx);
     92                 var maxtop = $(window).height()-$(this).height();//获取最小的宽度
     93                 var maxleft = $(window).width() - $(this).width();//获取最大的宽度
     94                 _top = _top < 0 ? 0 : (_top > maxtop ? maxtop : _top);//避免小球移除移出去
     95                 _left = _left > 0 ? _left : 0;//避免小球移除移出去
     96                 $(this).offset({ top: _top , left: _left });
     97                 mx = move.x;
     98                 my = move.y;
     99                 // isMove = true;
    100             }
    101             return false;//取消元素事件向下冒泡
    102         })
    103         $(".SuspendedBall").bind(PublicJs.Mouse.Up, function (e) {
    104             var _this = this;
    105             ///添加定时器,是因为有的时候move事件还没运行完就运行了这个事件,为了给这个时间添加一个缓冲时间这里定义了10毫秒
    106             setTimeout(function () {
    107                 if (isMove) {//如果移动了执行移动方法
    108                     var move = { x: $(_this).offset().left, y: $(_this).offset().top };
    109                     var width = $(window).width() / 2;
    110                     var height = $(window).height() / 2;
    111                     var ToLeftOrRight = "left";
    112                     var ToTopOrBottom = "top";
    113                     var MoveTo = "x";
    114                     if (move.x > width) {
    115                         ToLeftOrRight = "right";
    116                         move.x = 2 * width - move.x;//左右边距
    117                     }
    118                     if (move.y > height) {
    119                         ToTopOrBottom = "bottom";
    120                         move.y = 2 * height - move.y;//上下边距
    121                     }
    122                     if (move.x > move.y) {
    123                         MoveTo = "y";
    124                     }
    125 
    126                     $(_this).removeClass("ToLeft").removeClass("ToTop").removeClass("ToBottom").removeClass("ToRight");//去除原样式
    127                     if (MoveTo == "x") {
    128                         if (ToLeftOrRight == "left") {
    129                             $(_this).addClass("ToLeft");
    130                         }
    131                         else {
    132                             $(_this).addClass("ToRight");
    133                         }
    134                     }
    135                     else {
    136                         if (ToTopOrBottom == "top") {
    137                             $(_this).addClass("ToTop");
    138                         }
    139                         else {
    140                             $(_this).addClass("ToBottom");
    141                         }
    142                     }
    143                 }
    144                 else {
    145                     if (typeof (UpFun) == "function") {
    146                         UpFun();
    147                     }
    148                     $(".SuspendedBall").hide();
    149                     $(".BallBox").show();
    150                 }
    151                 isDown = false;
    152                 isMove = false;
    153             }, 10);
    154             return false;//取消元素事件向下冒泡
    155         })
    156     },
    157     //这个方法是显示页面上面的悬浮球方法
    158     ShowBall: function () {
    159         $(".SuspendedBall").show();
    160         $(".BallBox").hide();
    161     },
    162     //这个方法是显示页面上面的悬浮球菜单的方法
    163     ShowBox: function () {
    164         $(".SuspendedBall").hide();
    165         $(".BallBox").show();
    166     },
    167     //这个方法是给悬浮球菜单添加内容的方法
    168     BoxHtml: function (html) {
    169         $(".BallBoxInfo").html(html);
    170     },
    171     //这个方法是获取到父级页面的悬浮球的方法
    172     Partent: function () {
    173         if (typeof (window.parent.SuspendedBall) != "undefind") {
    174             return window.parent.SuspendedBall;
    175         }
    176         return null;
    177     }
    178 };
    179 //frame页面点击隐藏顶级父页面悬浮球菜单的方法
    180 function FrameBodyClick() {
    181     var topWin = (function (p, c) {
    182         while (p != c) {
    183             c = p
    184             p = p.parent
    185         }
    186         return c
    187     })(window.parent, window);
    188     $("body").bind(PublicJs.Mouse.Down, function (e) {
    189         if (topWin.SuspendedBall) {
    190             if ($(window).width() < topWin.SuspendedBall.ShowWidth) {
    191                 topWin.SuspendedBall.ShowBall();
    192             }
    193         }
    194     });
    195 }
    196 $(function () {
    197     FrameBodyClick();
    198 })
    SuspendedBall.js

    SuspendedBall.css

    悬浮球的样式

      1 .SuspendedBall {
      2     position: fixed;
      3     width: 50px;
      4     height: 50px;
      5     background: #3071a9;
      6     border-radius: 10px;
      7     -moz-border-radius: 10px;
      8     -webkit-border-radius: 10px;
      9     filter: alpha(opacity=50); /*IE滤镜,透明度50%*/
     10     -moz-opacity: 0.5; /*Firefox私有,透明度50%*/
     11     opacity: 0.5; /*其他,透明度50%*/
     12     z-index: 999; /*最高的层级*/
     13     top: 100px;
     14     left: 0px;
     15     display: none;
     16 }
     17 
     18     .SuspendedBall > div {
     19         width: 30px;
     20         height: 30px;
     21         margin: 10px;
     22         background: #fff;
     23         border-radius: 15px;
     24         -moz-border-radius: 15px;
     25         -webkit-border-radius: 15px;
     26         filter: alpha(opacity=80);
     27         -moz-opacity: 0.8;
     28         opacity: 0.8;
     29         background-image: url("/Images/Self.png");
     30         background-repeat: no-repeat;
     31         background-size: 80% auto;
     32         background-position-x: 50%;
     33         background-position-y: 50%;
     34     }
     35 
     36 @media screen and (max- 500px) {
     37     .SuspendedBall {
     38         display: block;
     39     }
     40 }
     41 
     42 
     43 @keyframes SuspendedBallToLeft {
     44     100% {
     45         left: 0px;
     46     }
     47 }
     48 
     49 @-webkit-keyframes SuspendedBallToLeft {
     50     100% {
     51         left: 0px;
     52     }
     53 }
     54 
     55 @-moz-keyframes SuspendedBallToLeft {
     56     100% {
     57         left: 0px;
     58     }
     59 }
     60 
     61 
     62 .ToLeft {
     63     animation: SuspendedBallToLeft 1s normal;
     64     -moz-animation: SuspendedBallToLeft 1s normal; /* Firefox */
     65     -webkit-animation: SuspendedBallToLeft 1s normal; /* Safari 和 Chrome */
     66     animation-iteration-count: 1;
     67     -moz-animation-iteration-count: 1; /* Safari 和 Chrome */
     68     -webkit-animation-iteration-count: 1; /* Safari 和 Chrome */
     69     animation-fill-mode: forwards;
     70     -moz-animation-fill-mode: forwards;
     71     -webkit-animation-fill-mode: forwards;
     72 }
     73 
     74 @keyframes SuspendedBallToTop {
     75     100% {
     76         top: 0px;
     77     }
     78 }
     79 
     80 @-webkit-keyframes SuspendedBallToTop {
     81     100% {
     82         top: 0px;
     83     }
     84 }
     85 
     86 @-moz-keyframes SuspendedBallToTop {
     87     100% {
     88         top: 0px;
     89     }
     90 }
     91 
     92 
     93 .ToTop {
     94     animation: SuspendedBallToTop 1s normal;
     95     -moz-animation: SuspendedBallToTop 1s normal; /* Firefox */
     96     -webkit-animation: SuspendedBallToTop 1s normal; /* Safari 和 Chrome */
     97     animation-iteration-count: 1;
     98     -moz-animation-iteration-count: 1; /* Safari 和 Chrome */
     99     -webkit-animation-iteration-count: 1; /* Safari 和 Chrome */
    100     animation-fill-mode: forwards;
    101     -moz-animation-fill-mode: forwards;
    102     -webkit-animation-fill-mode: forwards;
    103 }
    104 
    105 @keyframes SuspendedBallToBottom {
    106     100% {
    107         top: calc(100% - 50px);
    108         top: -webkit-calc(100% - 50px);
    109         top: -moz-calc(100% - 50px);
    110     }
    111 }
    112 
    113 @-webkit-keyframes SuspendedBallToBottom {
    114     100% {
    115         top: calc(100% - 50px);
    116         top: -webkit-calc(100% - 50px);
    117         top: -moz-calc(100% - 50px);
    118     }
    119 }
    120 
    121 @-moz-keyframes SuspendedBallToBottom {
    122     100% {
    123         top: calc(100% - 50px);
    124         top: -webkit-calc(100% - 50px);
    125         top: -moz-calc(100% - 50px);
    126     }
    127 }
    128 
    129 .ToBottom {
    130     animation: SuspendedBallToBottom 1s normal;
    131     -moz-animation: SuspendedBallToBottom 1s normal; /* Firefox */
    132     -webkit-animation: SuspendedBallToBottom 1s normal; /* Safari 和 Chrome */
    133     animation-iteration-count: 1;
    134     -moz-animation-iteration-count: 1; /* Safari 和 Chrome */
    135     -webkit-animation-iteration-count: 1; /* Safari 和 Chrome */
    136     animation-fill-mode: forwards;
    137     -moz-animation-fill-mode: forwards;
    138     -webkit-animation-fill-mode: forwards;
    139 }
    140 
    141 @keyframes SuspendedBallToRight {
    142     100% {
    143         left: calc(100% - 50px);
    144         left: -webkit-calc(100% - 50px);
    145         left: -moz-calc(100% - 50px);
    146     }
    147 }
    148 
    149 @-webkit-keyframes SuspendedBallToRight {
    150     100% {
    151         left: calc(100% - 50px);
    152         left: -webkit-calc(100% - 50px);
    153         left: -moz-calc(100% - 50px);
    154     }
    155 }
    156 
    157 @-moz-keyframes SuspendedBallToRight {
    158     100% {
    159         left: calc(100% - 50px);
    160         left: -webkit-calc(100% - 50px);
    161         left: -moz-calc(100% - 50px);
    162     }
    163 }
    164 
    165 .ToRight {
    166     animation: SuspendedBallToRight 0.5s normal;
    167     -moz-animation: SuspendedBallToRight 0.5s normal; /* Firefox */
    168     -webkit-animation: SuspendedBallToRight 0.5s normal; /* Safari 和 Chrome */
    169     animation-iteration-count: 1;
    170     -moz-animation-iteration-count: 1; /* Safari 和 Chrome */
    171     -webkit-animation-iteration-count: 1; /* Safari 和 Chrome */
    172     animation-fill-mode: forwards;
    173     -moz-animation-fill-mode: forwards;
    174     -webkit-animation-fill-mode: forwards;
    175 }
    176 
    177 
    178 
    179 .BallBox {
    180     position: fixed;
    181     z-index: 999;
    182     top: calc(50% - 160px);
    183     left: calc(50% - 160px);
    184     display: block;
    185     width: 300px;
    186     border: 1px solid #808080;
    187     border-radius: 10px;
    188     height: 300px;
    189     padding: 10px;
    190     display: none;
    191 }
    192 
    193     .BallBox > .Bg {
    194         position: absolute;
    195         z-index: 998;
    196         width: 300px;
    197         height: 300px;
    198         background-color: #ededed;
    199         background-image: url("/Images/Self.png");
    200         background-repeat: no-repeat;
    201         background-size: 50% auto;
    202         background-position: 50% 50%;
    203         filter: alpha(opacity=30);
    204         -moz-opacity: 0.3;
    205         opacity: 0.3;
    206     }
    207 
    208     .BallBox > .BallBoxInfo {
    209         position: absolute;
    210         z-index: 999;
    211         width: 300px;
    212         height: 300px;
    213         overflow: auto;
    214     }
    SuspendedBall.css

     还有要注意的是,你的body是否足够高。因为隐藏悬浮菜单的事件实在body上面触发的。我的页面中设置了html{100%;height:100%;}body{100%;height:100%}这两个样式。来解决这个问题,同事也解决了苹果手机里面的position:fixed;失效的问题

    然后下面是我们使用这个悬浮球的时候的代码了

    1 $(function () {
    2     SuspendedBall.Add();//添加悬浮球
    3     SuspendedBall.BoxHtml("<ul class="SMenu">" + $("#MenuInfo").html() + "</ul>");//添加菜单框的内容当然,具体的样式和里面的内容需要自己去写
    4     SuspendedBall.Move();//这个就是让悬浮球动起来的方法。为啥单独写个不写到add方法里面呢?因为你可以在页面中直接写入悬浮球的两个div。这个方法里面可以添加一个参数,这个参数是个function。当鼠标抬起的时候会调用到这个方法。
    5 });
    页面使用的js

    然后,整个悬浮球就做完了。

    想看的同学们可以打开我的网站去看:网址

    当然,要记得放到宽度小于500的浏览器中看,我设置了显示的大小。

    下面是我在google浏览器中手机界面看到的效果。

    好了,弄完了,钦此。

  • 相关阅读:
    (二十四)JSP标签之基本标签(<jsp:标签名>)
    (二十三)JSP指令
    (二十二)JSP基础语法
    (二十一)JSP基础
    java类的初始化过程
    redis的主从复制和哨兵支持的主从切换
    redis事务和乐观锁
    redis的持久化
    linux修改进程的名字
    在c代码中获取用户环境变量
  • 原文地址:https://www.cnblogs.com/flybeijing/p/6069660.html
Copyright © 2011-2022 走看看