npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

media-show-card

v1.3.0

Published

A plug-in that can configure the start and end points and customize the display area of the DOM video display card information

Downloads

53

Readme

简单介绍

  • 一款可以配置起点和终点以及定制展示区域的 dom 视频展示卡片信息的插件

插件原理

  • <AnimationControl/> 对原组件进行分割,将其视频播放和数据动画展示分开,分为 <AnimationWrapper.VideoBg/><control/>

  • control 是一个高阶组件, 在 control 中, 通过 this.props.control.getAnimationShow()来获取通过 props 的传值
  • 同时,通过引入 组件 来进行对原组件的增强 从而增加原组件动画渲染的特性
  • AnimationControl 组件的主要作用是对传入的数据和通过 AnimationControl.VideoBg 获取的相应时间节点进行处理,将处理后的数据和配置等传入给高阶组件 control。它对 AnimationWrapper.VideoBg 和 control 进行了深入一层的包裹,该组件需传入 src/serializeData 和 serializeDom.

    该组件中通过 AnimationControl.VideoBg 组件获取的动画展示的时间节点

<AnimationControl.VideoBg />

  • AnimationControl.VideoBg 组件是一个纯展示 video 组件,需要传入 video 的 src 和时间节点 timeout 以及 handleToggleNextShow 的回调(该函数会在到相应时间节点时触发)等一些配置,其组件内部主要功能是解析该 video,获取相关时间参数,返回给主组件 AnimationControl 使用

  • conntrol 是一个高阶组件,实现对 AnimationControl 组件的增强,使组件获得{...props}属性。它返回了通过 AnimationShow 组件包裹后的 dom,并生成动画。它对外暴露了 getAnimationShow 方法,该方法需要传入三个参数,第一个参数是动画消失时机的回调 handleFadeOutShow,第二个参数是相关动画展示的一些配置和动画的数量等,第三个参数是相应动画对应的 dom,通过 props.children 获取到传入的 dom,将其 dom 再次传给最终的动画组件 AnimationShow

  • AnimationShow 组件是动画组件,它将其动画分为 5 段,1 段:图标旋转,2 段: svg 画线,3 段和 4 段画出两个粗细不同的直线,最终 5 段动画来渲染通过高阶组件传入的 dom, 该组件需要传入一些配置...

使用方法

  • 安装

    npm i media-show-card -S

  • 组件中引入

    import MediaCardShow from 'media-show-card'

  • 组件中传入相应参数

    <MediaCardShow src={videoSrc} serializeData={serializeData} serializeDom={this.serializeDom} />

  • 相关参数 (3 个 必传)

    src -> string 视频源

    serializeData -> object 动画在相应时间节点展示的相关配置

    serializeDom -> func 动画在相应时间节点展示的 DOM

  • 例子:

    serializeData: [ { showSecond: 1, data: [ { startPoint: { x: 450, y: 300 }, endPoint: { x: 600, y: 430 }, frameType: "lucent", transparentDown: false, frameWidth: 500, frameHeight: 200, timeout: 3800 } ] } ]

  • 展示动画 DOM:

    serializeDom = currentTime => { switch (currentTime) { case 0: return ( <div> <div style={{ fontSize: "50px",color:'red' }}>传递的组件1</div> </div> ); } }

  • serializeData 参数中具体意义

    • @param startPoint Object 展示区卡片的起点坐标
    • @param endPoint Object 展示区卡片的终点坐标
    • @param frameType 展示区类型 : A. lucent string 半透明 B. parent string 全透明
    • @param transparentDown boolen 全透明情况下的下方展示(必须 frameType 为 parent)
    • @param frameWidth number 展示区宽度
    • @param frameHeight number 展示区高度
    • @param timeout number 动画展示时长(默认4000毫秒)

注意点

  • 每个动画的配置和 dom 的数量/结构是否对应(参考上方例子 或者 该插件的 example 目录)
  • 一个时间节点有多个动画的情况,dom 的结构要同级(除了第一层 dom,其他不要出现父子结构)
  • 默认在不传动画展示 DOM 情况下不显示整个动画过程以及 DOM
  • 使用 AnimationControl 组件时确保 serializeData 有值
  • 推荐写法 {this.state.serializeData.length !== 0 && ( <AnimationControl src={video1} serializeData={serializeData} serializeDom={this.getDom} /> )}
  • 视频默认开启自动无线循环播放

开发过程中所遇到的问题

  • <1> AnimationShow 组件内存泄漏

  • 原因(2 个)

    A. 组件卸载时没有及时清除定时器. 解决办法:清除所有定时器: componentWillUnmount() {clearTimeout(timer); } B. 组件还没挂载时/组件卸载时使用 setState()等异步方法 解决办法:清除所有的 state 状态: this.setState = (state, callback) => {return; };

  • <2> 组件的 props 丢失问题

  • 原因

    A.因为该组件是通过高阶函数 control 进行包裹, 其中的 props 可能没处理好. 解决办法:在高阶组件中将{this.props}和新的 {props} 合并后再传给代理组件 ProxyComponent

##homepage

https://github.com/funky-tiger/media-show-card/blob/master/README.md

##issues

https://github.com/funky-tiger/media-show-card/issues