当前位置: 首页 > news >正文

重庆产品推广类网站/整合营销的特点有哪些

重庆产品推广类网站,整合营销的特点有哪些,个人工作室,wordpress 上传 阿里云一、前言 在跟需求方对接研发的需求,人家说要做一个悬浮在页面的图标,点击完截图然后进入一个新页面,填完一些数据,提交给接口。那么问题来了,怎么制作一个悬浮框,还是可拖拽的悬浮框,还是可拖拽…

一、前言
在跟需求方对接研发的需求,人家说要做一个悬浮在页面的图标,点击完截图然后进入一个新页面,填完一些数据,提交给接口。那么问题来了,怎么制作一个悬浮框,还是可拖拽的悬浮框,还是可拖拽的H5悬浮框?于是,就开始了研发之旅。
制作之后的效果:
在这里插入图片描述

二、总代码
InformErrorHover.tsx悬浮图标总代码:

// 报错悬浮框
const InformErrorHover: FC<InformErrorHoverProps> = (props) => {const { visible = false, location } = props;const { errorFileList, imgBase64 } = useSelector((state) => state['informError']);const dispatch = useDispatch();const divRef = useRef<any>();const [itemHeight, setItemHeight] = useState<number>(80);const [itemWidth, setItemWidth] = useState<number>(80);const [left, setLeft] = useState<number>(0);const [top, setTop] = useState<number>(0);const [clientWidth, setClientWidth] = useState<number>(0);const [clientHeight, setClientHeight] = useState<number>(0);const [gapWidth, setGapWidth] = useState<number>(30);useEffect(() => {setClientWidth(document.documentElement.clientWidth);setClientHeight(document.documentElement.clientHeight);setLeft(document.documentElement.clientWidth - clientWidth - gapWidth);setTop(document.documentElement.clientHeight * 0.8);}, []);/*** 开始拖拽* @param e*/const dragStart = (e: any) => {divRef!.current!.style.transition = 'none';};/*** 结束拖拽* @param e*/const dragEnd = (e: any) => {divRef!.current!.style.transition = 'all 0.3s';if (left > clientWidth / 2) {setLeft(clientWidth - itemWidth - gapWidth);} else {setLeft(gapWidth);}};const touchmove = (e: any) => {if (e.targetTouches.length === 1) {let touch = e.targetTouches[0];setLeft(touch.clientX - itemWidth / 2);setTop(touch.clientY - itemHeight / 2);}};/*** 将base64转文件* @param dataurl* @param filename* @returns*/const dataURLtoFile = (dataurl: any, filename: any) => {var arr = dataurl.split(','),mime = arr[0].match(/:(.*?);/)[1],bstr = atob(arr[1]),n = bstr.length,u8arr = new Uint8Array(n);while (n--) {u8arr[n] = bstr.charCodeAt(n);}return new File([u8arr], filename, { type: mime });};const generateImage = async () => {// console.log('点击截图');Toast.loading('正在截图中...');await html2canvas(document.body).then((canvas) => {// document.body.appendChild(canvas);let url = canvas.toDataURL('image/png');// console.log({ url });let files = dataURLtoFile(url, '文件1');// console.log({ files });dispatch!({type: 'informError/save',payload: {errorFileList: [files],imgBase64: url,},});Toast.hide();history.push({ pathname: '/informError' });});};return (<divclassName={styles.informErrorHoverStyle}style={{ top: `${itemHeight}px` }}// onTouchMove={(e) => {//   console.log(e);// }}=><divclassName={styles.imgDiv}ref={divRef}style={{backgroundImage: `url(${require('@/assets/images/inforErrorPng.png')})`,width: `${itemWidth}px`,height: `${itemHeight}px`,left: `${left}px`,// right: '0px',top: `${top}px`,}}onClick={() => {generateImage();}}onTouchStart={(e) => {dragStart(e);}}onTouchEnd={(e) => {dragEnd(e);}}onTouchMove={(e) => {touchmove(e);}}></div></div>);
};

less样式代码:

.informErrorHoverStyle{.imgDiv{position: fixed;right: 20px;z-index: 9999;width: 40px;height: 40px;white-space: nowrap;background-size: 100% 100%;transition: all 0.3s;}.imgStyle{width: 40px;height: 40px;}
}

三、详解:
1、需要定义的数据

  // 图标的refconst divRef = useRef<any>();// 图标的高度const [itemHeight, setItemHeight] = useState<number>(80);// 图标的宽度const [itemWidth, setItemWidth] = useState<number>(80);// 向左移动的距离const [left, setLeft] = useState<number>(0);// 向上移动的距离const [top, setTop] = useState<number>(0);// 获取浏览器窗口文档显示区域的宽度const [clientWidth, setClientWidth] = useState<number>(0);// 获取浏览器窗口文档显示区域的宽高度const [clientHeight, setClientHeight] = useState<number>(0);// 图标距离边距的距离const [gapWidth, setGapWidth] = useState<number>(30);

2、需要定义的方法

  /*** 开当按下手指时,触发* @param e*/const dragStart = (e: any) => {divRef!.current!.style.transition = 'none';};/*** 当移走手指时,触发* @param e*/const dragEnd = (e: any) => {divRef!.current!.style.transition = 'all 0.3s';if (left > clientWidth / 2) {setLeft(clientWidth - itemWidth - gapWidth);} else {setLeft(gapWidth);}};/*** 当移动手指时,触发* @param e*/const touchmove = (e: any) => {if (e.targetTouches.length === 1) {let touch = e.targetTouches[0];setLeft(touch.clientX - itemWidth / 2);setTop(touch.clientY - itemHeight / 2);}};

3、dom节点内容

   return (<divclassName={styles.informErrorHoverStyle}style={{ top: `${itemHeight}px` }}// onTouchMove={(e) => {//   console.log(e);// }}=><divclassName={styles.imgDiv}ref={divRef}style={{// 图片backgroundImage: `url(${require('@/assets/images/inforErrorPng.png')})`,// 初始化宽度width: `${itemWidth}px`,// 初始化高度height: `${itemHeight}px`,// 距左边的距离left: `${left}px`,// 距上面的距离top: `${top}px`,}}onClick={() => {generateImage();}}// 开当按下手指时,触发onTouchStart={(e) => {dragStart(e);}}// 当移走手指时,触发onTouchEnd={(e) => {dragEnd(e);}}// 当移动手指时,触发onTouchMove={(e) => {touchmove(e);}}>{/* <img src={img ? img : InforErrorPng} className={styles.imgStyle} /> */}</div></div>);
http://www.lbrq.cn/news/816985.html

相关文章:

  • 网站建设哪家效果好/怎样把广告放到百度
  • rp如何做网站/合肥网站优化推广方案
  • 长沙雨花区建设局网站/赣州是哪个省
  • 太原网站建设baidu/营销网络的建设
  • 湘潭做网站价格 q磐石网络/百度一下你就知道百度首页
  • 郑州企业网站建设公司/商丘seo
  • 网站软文设计/网站权重是什么意思
  • element ui设计网站/做搜索引擎推广多少钱
  • app开发制作教程/seo诊断工具
  • 做网站哪家好 要钱/百度seo搜索排名
  • 迅捷流程图在线制作网站/百度app交易平台
  • 莆田百度seo公司/北京seo优化方案
  • 推广公司的广告语/seo课堂
  • 重庆网站开发商城/seo关键词优化排名推广
  • 网站 开发 合同/seo网站优化论文
  • 外贸网站建设案例/黑龙江最新疫情通报
  • 购物网站开发目的/上海平台推广的公司
  • 如何做病毒视频网站/seovip培训
  • wordpress 众筹网站模板/重庆seo网站系统
  • 精密导航/邯郸seo优化公司
  • 凡科网站官网登录入口/四川seo平台
  • 哪个网站可以做申论真题/嘉兴seo网络推广
  • 我有一个域名怎么做网站/小学四年级摘抄新闻
  • 自学做网站可以赚钱吗/如何介绍自己设计的网页
  • 网站哪个公司做/谷歌浏览器安卓下载
  • 网站规划的内容/韶关新闻最新今日头条
  • 做机械方面外贸最大的网站/企业网站模板免费
  • 济南做微网站推广/中国旺旺(00151) 股吧
  • 用ps做网站的首页/网站开发平台有哪些
  • 织梦的网站收录不好/做网络营销推广
  • J2EE模式---表现层集成模式
  • OpenCV学习探秘之二 :数字图像的矩阵原理,OpenCV图像类与常用函数接口说明,及其常见操作核心技术详解
  • 【0基础PS】PS(Photoshop)与Ai( Illustrator )等相似软件区别
  • Windows 10 远程桌面(RDP)防暴力破解脚本
  • 深度解析:在Odoo 18中基于原生Owl框架为PWA定制功能丰富的底部导航栏
  • rust-结构体使用示例