jq实现页面随机生成若干个点点效果

项目中需要实现页面随机生成若干个点点效果,就百度了一哈

查到个在页面上任意位置点击生成不同颜色不同大小点点的代码

按自己的需求改了改,能实现我想要的效果,在此记录下来这个方法

源码如下:

<style>
	 *{
	   margin: 0;
	   padding: 0;
	 }
	 html {
	   position: relative;
	 }
	 div {
	   width: 100px;
	   height: 100px;
	   position: absolute;
	   border-radius: 50%;
	 }
</style>
//不需要写其他dom结构 因为直接对html标签操作
<script>
    //封装随机数
     function getRandNum(min, max) {
       return Math.floor(Math.random() * (max - min + 1) + min); //为了取到255 所以(max - min + 1)这里加了个1 结合 向下取整可以取到255
     }
     //封装随机颜色
     function getRandColor() {
       var color1 = getRandNum(0, 255);
       var color2 = getRandNum(0, 255);
       var color3 = getRandNum(0, 255);
       return "rgb(" + color1 + "," + color2 + "," + color3 + ")";
     }
     //将生成的点点放入html标签内
  function fff() {
       var even = event || window.event;
       console.log(even)
       //控制生成点点的大小
       var k = getRandNum(5, 10);
       //生成点点的位置
       var x = even.clientX;
       var y = even.clientY;
       html.innerHTML +=
         '<div style="top:' +
         (y - k / 2) +
         "px;left:" +
         (x - k / 2) +
         "px;background-color:"+getRandColor()+";width:" +
         k +
         "px;height:" +
         k +
         'px;"></div>';
     }
     var html = document.getElementsByTagName("html")[0];
     // 绑定点击事件
     document.addEventListener("click", fff, false);
</script>

效果图
在这里插入图片描述

我的需求是在页面随机生成多个点点 并伴随闪烁效果
根据我的需求改后的代码:

<style>
/* 点点的最外层容器 */
  .bottom ,.slide4{
      width: 100%;
      height: 300px;
      position: relative;
      border: 0.01rem solid blue;
  }
 /* 点点们的集合 */
   .dots{
      width: 100%;
      height: 100%;
      position: absolute;
      top: 0;
      left: 0;
  }

   .dots div {
      position: absolute;
      background-color: #889dd0;
      border-radius: 50%;
  }
  /* 其中一种点点的样式 */
   .dots div.num1 {
      animation: num1-run 2s linear infinite;
      animation-direction: alternate;
  }

   .dots div.num2 {
      animation: num2-run 3s linear infinite;
      animation-direction: alternate;
  }

   .dots div.num3 {
      animation: num3-run 2.5s linear infinite;
      animation-direction: alternate;
  }
/* 第一种背景光点的动效 */
@keyframes num1-run {
  0% {
    transform: translate(0rem, 0rem);
    opacity: 0;
    box-shadow: 0 0 0 0 rgb(226, 189, 141) inset;
  }
  20% {
    opacity: 1;
  }
  50% {
    transform: translate(-0.1rem, 0.15rem);
    opacity: 0;
  }
  100% {
    transform: translate(0.3rem, 0.3rem);
    opacity: 1;
    box-shadow: 0 0 0.1rem 0.1rem rgb(226, 189, 141) inset;
  }
}
/* 第二种背景光点的动效 */
@keyframes num2-run {
  0% {
    transform: translate(0rem, 0rem);
    opacity: 1;
    box-shadow: 0 0 0 0 rgb(226, 189, 141) inset;
  }
  20% {
    opacity: 0;
  }
  50% {
    transform: translate(-0.2rem, 0.15rem);
    opacity: 1;
    box-shadow: 0 0 0.1rem 0.05rem rgb(226, 189, 141) inset;
  }
  100% {
    transform: translate(-0.3rem, -0.4rem);
    opacity: 0;
  }
}
/* 第三种背景光点的动效 */
@keyframes num3-run {
  0% {
    transform: translate(0rem, 0rem);
    opacity: 0;
    box-shadow: 0 0 0 0 rgb(226, 189, 141) inset;
  }
  20% {
    opacity: 1;
  }
  50% {
    transform: translate(-0.2rem, 0.15rem);
    opacity: 0;
  }
  100% {
    transform: translate(-0.3rem, 0.4rem);
    opacity: 1;
    box-shadow: 0 0 0.1rem 0.05rem rgb(226, 189, 141) inset;
  }
}
</style>


//...html结构
<div class="bottom">
   <div class="dots"></div>
</div>
<div class="swiper-slide slide4">
   <div class="dots"></div>
</div>
//...html结构


<script src="./js/jquery-2.1.1.min.js"></script>
<script src="./js/rem.js"></script>
<script>
let bottom = $(".bottom .dots");
let slide4 = $(".slide4 .dots");
// 产生随即点点 参数dom - 生成点点的父盒子 参数index - 标识不同的效果
function createDots(dom, index) {
  // 产生点点的位置
  var r = getRandNum(0.1, 0.17); 
  var y = getRandNum(0, 100); 
  var x = getRandNum(0, 100);
  var html = dom.html();
  var temp = getRandNum(0, 1);
  if (index == 1 && 55 > y && y > 10) {
    return;
  } else if (temp > 0.7) {
    dom.html(
      html +
      `<div class="num1 bling1" style="top:${y}%;left:${x}%;width:${r}rem;height:${r}rem;"></div>`
    );
  } else if (temp > 0.4) {
    dom.html(
      html +
      `<div class="num2 bling2" style="top:${y}%;left:${x}%;width:${r}rem;height:${r}rem;"></div>`
    );
  } else {
    dom.html(
      html +
      `<div class="num3 bling3"  style="top:${y}%;left:${x}%;width:${r}rem;height:${r}rem;"></div>`
    );
  }
  //  else {
  //   dom.html(
  //     html +
  //       `<div style="top:${y}%;left:${x}%;width:${r}rem;height:$ {r}rem;"></div>`
  //   );
  // }
}

for (let i = 0; i < 25; i++) {
  createDots(bottom, 0);
}
for (let i = 0; i < 60; i++) {
  createDots(slide4, 1);
}

// 在限定范围产生随机数
function getRandNum(min, max) {
  return (Math.random() * (max - min) + min).toFixed(1); //保留一位小数
}
</script>

效果图
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
可以先选中所有需要展开收起的元素,然后对每个元素分别绑定事件,实现展开收起的效果。具体实现过程如下: 1. 给需要展开收起的元素添加一个共同的 class,比如 `expandable`。 2. 使用 jQuery 选中所有的 `.expandable` 元素,然后对每个元素分别绑定事件。 3. 在事件中使用 `slideToggle()` 方法实现展开收起的效果。 示例代码如下: ```html <!DOCTYPE html> <html> <head> <title>一个页面中有多个展开收起用jq怎么实现</title> <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <style> .expandable { padding: 10px; background-color: #eee; cursor: pointer; margin-bottom: 10px; } .expandable-content { display: none; padding: 10px; background-color: #fff; } </style> </head> <body> <div class="expandable"> <h3>标题1</h3> <div class="expandable-content"> <p>内容1</p> </div> </div> <div class="expandable"> <h3>标题2</h3> <div class="expandable-content"> <p>内容2</p> </div> </div> <div class="expandable"> <h3>标题3</h3> <div class="expandable-content"> <p>内容3</p> </div> </div> <script> $(document).ready(function() { $('.expandable').each(function() { $(this).click(function() { $(this).find('.expandable-content').slideToggle(); }); }); }); </script> </body> </html> ``` 在上述代码中,我们首先给需要展开收起的元素添加了 `.expandable` 这个 class,然后使用 jQuery 选中所有的 `.expandable` 元素,并对每个元素分别绑定了击事件。在击事件中,我们使用 `slideToggle()` 方法来实现展开收起的效果。 注意,这里使用了 `each()` 方法对每个 `.expandable` 元素进行遍历,因为这样可以确保每个元素都被绑定了击事件。如果直接使用 `$('.expandable').click()`,则只会对第一个元素绑定事件,其他元素则无法响应击事件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值