html点击圆形扩散显示界面特效

html点击圆形扩散显示界面特效

  • 开场白
  • 效果
  • 用到的核心代码
  • 思考
  • 探索
  • 源码
  • 兼容性问题

开场白

经常看到某些app有点击扩散的特效,有些当做扩散显示界面,有些扩散改变主题颜色,想在网页上实现一下,所以就有了这个。

效果

不想听逼逼的直接去源码

用到的核心代码

css的样式

overflow:hidden;/*隐藏超出部分*/
position:fixed;/*用于悬浮*/

jquery的动画

$("#id").animate()

思考

先创建一个圆形div和一个按钮:

 <div id="side_circle"></div>
  <button type="button" id="spread" >点我扩散</button>
#side_circle{
position:fixed;
overflow:hidden;
width:0;height: 0;
background-color:#0f0;
border-radius:50%; }

然后试着对齐进行animate放大动画,效果是点击按钮,圆圈逐渐放大

$(document).ready(function() {
     $("#spread").click(function() {
         $("#side_circle").animate({
          height:"1000px",
          width:"1000px",
            }, 1500, function() {/*结束后要做的事*/ });
     });
 })

完成看下效果

可以看到他是逐渐扩大了,但是他也发生了位移,我们想要的效果是,点击的按钮的位置始终保持是圆心!那就需要用到margin-top:;margin-left:;因为圆里面是需要有界面的,所以扩大后的圆还要铺满屏幕。

要做的大概是:

  • [ ] 保持圆心位置与按钮位置一致
  • [ ] 外圆必须铺满屏幕
  • [ ] 圆内的界面保持位置

探索

如图(画的不好),我们需要得知

$(this).offset().top;//按钮与上的距离
$(this).offset().left;//按钮与左的距离
var cir_radius = $("#side_circle").css("width")//圆宽度
var cir_top = $("#side_circle").css("marginTop")//圆与顶部的距离
var cir_left = $("#side_circle").css("marginLeft")//圆与左边的距离
var max_radius = Math.sqrt(window.screen.width * window.screen.width + window.screen.height * window.screen.height);//斜边大小

//圆需要放大且移动到屏幕外的这个位置
marginLeft:-(max_radius - (cir_left + cir_radius)) + "px",
marginTop:-(max_radius - (cir_top + cir_radius)) + "px",
//圆半径至少要大于斜边 所以宽度=斜边x2
height:max_radius * 2 + "px",
width:max_radius * 2 + "px",

逻辑已经理清楚了。看看效果

和想象中的一样!接下来就是往圆内添加div内容了,这里有个让我觉得有些奇怪,但是又是利用了这点实现的,圆的子div同样设置为position:fixed;(先别打我),你没听错,奇怪之处在于即使子div设置了fixed也会受到父divoverflow:hidden;的影响而隐藏[但是元素大小不变(你无法点击,不过这正和扩展显示界面的意,防止误点了)]
,收缩的方式也依样画葫芦就好了。

源码

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>这里填写标题</title>
    <meta name="keywords" content="这里填写关键词" />
    <meta name="description" content="这里填写说明内容" />
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <script src="https://code.jquery.com/jquery-3.4.1.min.js"></script>

  </head>
  <body>
<!--div style="position:fixed;overflow:hidden;width:100%;height:100%"-->
    <div id="side_circle">
      <div id="screen_div">
      橙色在边框部分为screen_div
        <div>
         我是screen_div内的元素1
        </div>
        <div >
        我是screen_div内的元素2
        </div>
         <button type="button" id="shrink" >点我收缩</button>
      </div>
    </div>
    <button type="button" id="spread" >点我扩散</button>
<!--/div-->
  </body>
<style type="text/css">
*{margin:0;padding:0;}
#side_circle{
   display:none;/*隐藏*/
   position:fixed;
   z-index:9;
   overflow:hidden;/*即使子元素设置了position:fixed;但父元素overflow:hidden仍然可以限制它*/
   /*margin-top:50%;margin-left:30%;/*外圆的位置随意更改*/
   width:0;height:0;
   background-color:#0f0;
   border-radius:50%;
   /*border:3px solid #f00;*/
}
#screen_div{
   display:none;/*隐藏*/
   z-index:8;
   position:fixed;left:0;top:0;
   margin-left:0px;margin-top:0px;
   width:100%;height:100%;
   background-color:#aaa;
   border:8px solid #f90;
   text-align:center;box-sizing: border-box;
}
/*以下是screen_div下元素的样式可忽略*/
#screen_div div{
width:100px;height:200px;background-color:#00f;

}

#screen_div div:first-child{
   width:80%;height:60px;background-color:#f00;
   position:absolute;right:0;top:100px;
}

</style>
  <script>
  /*以斜边为最大半径*/
var max_radius = Math.sqrt(window.screen.width * window.screen.width + window.screen.height * window.screen.height);
$(document).ready(function() {
     $("#spread").click(function() {
     //按钮距离屏幕最上方和最左边的距离
        var button_top =  $(this).offset().top;
        var button_left =  $(this).offset().left;
       //将圆的位置移动到按钮的位置
        $("#side_circle").css({"marginTop":button_top+"px",
                              "marginLeft":button_left+"px"});
       //显示隐藏的外圆和全屏div
          $("#side_circle").css("display","block");
          $("#screen_div").css("display","block");

        var cir_radius = $("#side_circle").css("width").replace("px", "");
        var cir_top = $("#side_circle").css("marginTop").replace("px", "");
        var cir_left = $("#side_circle").css("marginLeft").replace("px", "");
        $("#side_circle").animate({
          marginLeft:-(max_radius - (cir_left + cir_radius)) + "px",
          marginTop:-(max_radius - (cir_top + cir_radius)) + "px",
          height:max_radius * 2 + "px",
          width:max_radius * 2 + "px",
            }, 1500, function() {/*结束后要做的事*/ });
     });//click
});

$(document).ready(function() {
     $("#shrink").click(function() {
     //扩散完毕后隐藏的外圆显示
    // $("#side_circle").css("display", "block");
        var button_top =  $(this).offset().top;
        var button_left =  $(this).offset().left;
        $("#side_circle").animate({
          marginLeft:button_left + "px",
          marginTop:button_top + "px",
          height:1+ "px",//不设置为0 ,0的话结束之后screen_div会显示,此时再none的话会出现闪烁!
          width:1+ "px",
            }, 1500, function() {/*结束后要做的事*/ $("#side_circle").css("display", "none"); $("#screen_div").css("display", "none");});
     });//click
});

  </script>
</html>
 

兼容性问题

功能实现了,可是引发了两个未能解决的问题[愁],
1.父级div与子级div同时设置fixed,且父级div设置overflow:hidden;的效果,谷歌浏览器不支持,ie QQ浏览器等都试过了都可以,除了谷歌浏览器不支持,会直接显示子div不受控制。
2.第一次点击扩展按钮时,screen_div会闪烁一下,起初以为是display的问题或者父级的width height的问题,但是尝试失败。

原文地址:https://www.cnblogs.com/zzerx/p/12239482.html

时间: 2024-11-05 22:47:23

html点击圆形扩散显示界面特效的相关文章

基于jQuery点击淡入淡出显示图片特效

分享一款基于jQuery点击淡入淡出显示图片特效.这是一款基于jQuery+CSS3实现酷炫效果的图片切换特效代码.效果图如下: 在线预览   源码下载 实现的代码. html代码: <center><p style="color:#334960">点击图标进行展示</p></center> <div class="main"> <div id="coolShow"><

监控鼠标的位置点击实现圆形扩散动画

首先看效果图如下: 一.要实现如下的效果我们先分析都要什么? 1:首先我们要先实现这个动画扩散效果. 2:然后当鼠标点击该标签时,你需要在他的下面新增一个标签并把这个动画给这个新增标签. 3:其次我们要监控鼠标的位置. 4:在其次找到被点击的标签的位置与鼠标点击位置相减就是这个做动画的标签的初始位置. 5:让这个标签到相应位置之后再做动画. 二.实现效果 1:页面增加一个div标签改变他的样式 .bg{ background: silver; height: 50px; width: 200px

Android 分享一个流量显示界面

版本:1.0 日期:2014.8.9 2014.9.24 版权:© 2014 kince 转载注明出处 波形效果有几种不同的呈现形式,比如从中间向四周散开的波形,也就是熟知的水涟漪:还有上下波动的曲线,像五线谱等.英文中可以称作Wave或者Ripple,所以暂且叫它们WaveView.WaveLayout.RippleView.RippleLayout,接下来开始实现这些效果. 首先看一下Solo 火爆足球动态壁纸, 下面中间的按钮就是一个波形按钮,它会不断地向四周辐射,由于是静态图,如果想体验

3月3日 winfrom 470多例界面特效的源码

转自http://blog.sina.com.cn/s/blog_b009eb330102vly1.html 窗体与界面设计... 9 实例001  带历史信息的菜单    10 实例002  菜单动态合并    12 实例003  像开始菜单一样漂亮的菜单... 14 实例004  任务栏托盘菜单    15 实例005  可以拉伸的菜单界面    16 实例006  菜级联菜单    18 1.2  工具栏设计... 19 实例007  带带背景的工具栏    19 实例008  带浮动工具

[Android] 给图像添加相框、圆形圆角显示图片、图像合成知识

    前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和添加水印,继续我的"随手拍"项目完成给图片添加相框.圆形圆角显示图片和图像合成的功能介绍.希望文章对大家有所帮助. 一. 打开图片和显示assets文件中图片 首先,对XML中activity_main.xml进行布局,通过使用RelativeLayout相对布局完成(XML代码后面附).然后,在Mainctivity.java中public class MainActivity e

[Android] 给图像加入相框、圆形圆角显示图片、图像合成知识

    前一篇文章讲述了Android触屏setOnTouchListener实现突破缩放.移动.绘制和加入水印,继续我的"随手拍"项目完毕给图片加入相框.圆形圆角显示图片和图像合成的功能介绍.希望文章对大家有所帮助. 一. 打开图片和显示assets文件里图片 首先,对XML中activity_main.xml进行布局,通过使用RelativeLayout相对布局完毕(XML代码后面附).然后,在Mainctivity.java中public class MainActivity e

MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白

MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白,症状如下: 解决方案如下: MyEclipse导入主题文件epf后xml及jsp等页面中点击标签之后显示灰白,布布扣,bubuko.com

点击Div,显示其innerHTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

添加数据源,管理工具--数据源(ODBC),点击添加不显示该驱动

win7系统下或者64位系统下,安装完mysql-connector-odbc驱动后,直接进入:管理工具--数据源(ODBC),点击添加不显示该ODBC驱动 问题解决如下: C:\Users\Administrator>cd\windows\SysWOW64 C:\windows\SysWOW64>odbcad32 回车弹出 ODBC数据源管理器,在此窗口下进行添加操作即可看到:MySQL ODBC 5.1 Driver,点击完成,进行后续操作,完成添加操作,图示如下: