animation.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. function toggleRemindWithAnimation(page, {
  2. remindKey = 'IsShowRemind',
  3. animationKey = 'parentAnimation',
  4. panelAnimationKey = 'panelAnimation', // 新增:控制内容面板的动画类名
  5. duration = 400,
  6. showAnimation = 'remind-slide-up',
  7. hideAnimation = 'remind-slide-down',
  8. vectorKey = 'VectorCSS',
  9. hideColor = 'rgba(0,0,0,0)',
  10. showColor = 'rgba(26,67,51,0.5)'
  11. } = {}) {
  12. // 获取当前显示状态
  13. const isCurrentlyShown = page.data[remindKey];
  14. if (isCurrentlyShown) {
  15. // 如果当前是显示状态,先播放隐藏动画,然后再隐藏
  16. const animationData = {};
  17. // 只为内容面板设置滑动动画
  18. animationData[panelAnimationKey] = hideAnimation;
  19. // 设置蒙版透明度动画为渐变消失
  20. animationData[vectorKey] = "background-color: " + hideColor + "; transition: background-color " + duration + "ms ease";
  21. page.setData(animationData);
  22. // 等待动画完成后再隐藏弹窗
  23. setTimeout(function() {
  24. const hideData = {};
  25. hideData[remindKey] = false;
  26. page.setData(hideData);
  27. }, duration);
  28. } else {
  29. // 如果当前是隐藏状态,直接显示并播放显示动画
  30. const showData = {};
  31. showData[remindKey] = true;
  32. // 只为内容面板设置滑动动画
  33. showData[panelAnimationKey] = showAnimation;
  34. // 设置蒙版透明度动画为渐变出现
  35. showData[vectorKey] = "background-color: " + hideColor + "; transition: background-color " + duration + "ms ease";
  36. page.setData(showData);
  37. // 在下一帧设置最终的半透明状态,触发过渡动画
  38. setTimeout(function() {
  39. const updateData = {};
  40. updateData[vectorKey] = "background-color: " + showColor + "; transition: background-color " + duration + "ms ease";
  41. page.setData(updateData);
  42. }, 50);
  43. }
  44. }
  45. module.exports = {
  46. toggleRemindWithAnimation:toggleRemindWithAnimation,
  47. }