1. 程式人生 > >手指觸控動畫效果(完整程式碼附效果圖)

手指觸控動畫效果(完整程式碼附效果圖)

 

本文共有兩個示例,先上圖 

示例一:  示例二:

示例一程式碼(微信小程式):

 

 
  1. // pages/test/test.js

  2. Page({

  3. containerTap: function (res) {

  4. var that = this

  5. var x = res.touches[0].pageX;

  6. var y = res.touches[0].pageY + 85;

  7. this.setData({

  8. rippleStyle: ''

  9. });

  10. setTimeout(function () {

  11. that.setData({

  12. rippleStyle: 'top:' + y + 'px;left:' + x + 'px;-webkit-animation: ripple 0.4s linear;animation:ripple 0.4s linear;'

  13. });

  14. },200)

  15. },

  16. })

 

 
  1. <view class="ripple" style="{{rippleStyle}}"></view>

  2. <view class="container" bindtouchstart="containerTap"></view>

 

 

 

 

 

 

 
  1. page{height:100%}

  2. .container{

  3. width:100%;

  4. height:100%;

  5. overflow: hidden

  6. }

  7. .ripple {

  8. background-color: rgba(0, 0, 0, 0.6);

  9. border-radius: 100%;

  10. height:10px;

  11. width:10px;

  12. margin-top: -90px;

  13. position: absolute;

  14. -webkit-transform: scale(0);

  15. overflow: hidden

  16. }

  17. @-webkit-keyframes ripple {

  18. 100% {

  19. -webkit-transform: scale(12);

  20. transform: scale(12);

  21. background-color: transparent;

  22. }

  23. }

 

示例二程式碼(html5)

 

 
  1. <!DOCTYPE html>

  2. <html>

  3.  
  4. <head>

  5. <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />

  6. <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">

  7. <title>點選後水波紋擴散填充元件效果</title>

  8. <style>

  9. .btn {

  10. position: relative;

  11. width: 13em;

  12. height: 3em;

  13. margin: 2em;

  14. border: none;

  15. outline: none;

  16. letter-spacing: .2em;

  17. font-weight: bold;

  18. background: #F6774F;

  19. cursor: pointer;

  20. overflow: hidden;

  21. user-select: none;

  22. border-radius: 2px;

  23. color: #fff;

  24. }

  25.  
  26. .ripple {

  27. position: absolute;

  28. background: rgba(0, 0, 0, .15);

  29. border-radius: 100%;

  30. transform: scale(0);

  31. pointer-events: none;

  32. }

  33.  
  34. .ripple.show {

  35. animation: ripple 1s ease-out;

  36. }

  37.  
  38. @keyframes ripple {

  39. to {

  40. transform: scale(2);

  41. opacity: 0;

  42. }

  43. }

  44. </style>

  45. </head>

  46.  
  47. <body>

  48. <h1 class="center mt40">點選後水波紋擴散填充元件效果</h1>

  49. <div class="main center">

  50. <button id="bowen" class="btn ">BUTTON</button>

  51. </div>

  52. <script>

  53. var addRippleEffect = function(e) {

  54. var target = e.target;

  55. // target 事件屬性可返回事件的目標節點(觸發該事件的節點)

  56. // console.log(e.target)

  57. if(target.id != 'bowen') return false;

  58. // 如果當前節點的id不等於'bowen',就返回false,停止執行函式

  59. var rect = target.getBoundingClientRect();

  60. // target.getBoundingClientRect() 方法返回元素的大小及其相對於視口的位置。

  61. var ripple = target.querySelector('.ripple');

  62. // target.querySelector()方法返回文件中匹配指定 CSS 選擇器的一個元素。

  63. console.log(ripple) //這裡建立一個ripple節點物件,此時為null

  64. if(!ripple) {

  65. ripple = document.createElement('span'); //這裡ripple等於<span></span>

  66. // document.createElement()在當前節點建立一個標籤元素

  67. ripple.className = 'ripple';//這裡ripple等於<span class="ripple"></span>

  68. // 給ripple新增一個樣式類名

  69. ripple.style.height = ripple.style.width = Math.max(rect.width, rect.height) + 'px';//這裡height和width是相等的

  70. // Math.max(a,b)返回兩個指定的數中帶有較大的值的那個數。

  71. target.appendChild(ripple);//在當前節點新增ripple元素物件

  72. // appendChild(); 在指定節點新增元素

  73. }

  74. ripple.classList.remove('show');//移除ripple物件名為的'show' CSS 類

  75. // classList 屬性返回元素的類名,可以使用 add() 和 remove() 方法修改它.該屬性用於在元素中新增,移除及切換 CSS 類。

  76. var top = e.pageY - rect.top - ripple.offsetHeight / 2 - document.body.scrollTop;

  77. var left = e.pageX - rect.left - ripple.offsetWidth / 2 - document.body.scrollLeft;

  78. // e.pageY 顯示滑鼠的位置 offsetHeight 獲取元素的高度 offsetWidth 獲取元素的寬度 scrollTop() 方法返回或設定匹配元素的滾動條的垂直位置。

  79. ripple.style.top = top + 'px';

  80. ripple.style.left = left + 'px';

  81. ripple.classList.add('show');

  82. return false;

  83. }

  84. document.addEventListener('click', addRippleEffect);//addEventListener('事件名稱',執行函式)監聽事件

  85. </script>

  86.  
  87. </body>

  88.  
  89. </html>

轉自:https://blog.csdn.net/qq_35713752/article/details/78682954