电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術(shù)文章
文章詳情頁

vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題

瀏覽:128日期:2022-12-31 10:02:59

寫在最前

針對(duì)于在vue中實(shí)現(xiàn)拖拽改變兩左右個(gè)div大小的方式,請(qǐng)查看上一篇文章《vue中實(shí)現(xiàn)拖動(dòng)調(diào)整左右兩側(cè)div的寬度》。此文章主要針對(duì)于實(shí)際應(yīng)用中需要拖拽改變大小的組件中使用iframe框架時(shí)存在明顯卡頓的問題,比如這樣,右側(cè)div中使用了一個(gè)iframe組件,導(dǎo)致實(shí)際操作中出現(xiàn)兩個(gè)問題,一個(gè)是拖不動(dòng),另外一個(gè)是無法根據(jù)鼠標(biāo)移動(dòng),快速響應(yīng),甚至在監(jiān)聽鼠標(biāo)的按下和松開事件上都有明顯的卡頓問題。如果去除右側(cè)iframe框架,則沒有問題。

有iframe情況

vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題

無iframe情況

vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題

vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題

問題原因&解決思路

問題原因我不知道,不過這個(gè)博客給了我解決思路《解決jqueryUI的拖拽,如果元素中含有iframe,拖動(dòng)卡的問題》,還有以下說法,他們的解決思路一樣的。因此我猜想是鼠標(biāo)的監(jiān)聽造成的影響,在我們拖拽的時(shí)候,因?yàn)橥献н^快,很容易出現(xiàn)鼠標(biāo)移動(dòng)超過拖拽范圍的情況,此時(shí)的鼠標(biāo)可能已經(jīng)在iframe上方,從而會(huì)同時(shí)加載iframe中的內(nèi)容,導(dǎo)致出現(xiàn)卡頓。

總之,解決的思路就是在拖動(dòng)的時(shí)候,在iframe上方添加一個(gè)透明的遮罩層,然后在停止拖拽的時(shí)候讓其消失。這樣問題就可以完美解決了。

vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題

解決方式共有兩節(jié),一節(jié)包含我解決過程中遇到的問題,一節(jié)是直接的解決方式,如果想直接查看解決方式的,請(qǐng)直接跳轉(zhuǎn)至解決方式那一節(jié)

解決方式(含解決過程中遇到的問題)

HTML組件部分源代碼

這是實(shí)現(xiàn)拖拽的組件代碼,如果不了解我原本使用的實(shí)現(xiàn)方式,請(qǐng)參考《vue中實(shí)現(xiàn)拖動(dòng)調(diào)整左右兩側(cè)div的寬度》

<div ref='box'> <div ref='left'> </div> <div ref='resize'> ⋮ </div> <div ref='mid'> <!--在此處添加遮罩層--> <iframe name='iFrame1' frameborder='0' scrolling='auto' :src='http://www.hdgsjgj.cn/bcjs/iframeUrl'> </iframe> </div> </div>

添加遮罩層

在以上標(biāo)注的地方,添加如下代碼

<div class='iframeDiv'></div>

再添加遮罩層的css樣式即可,此時(shí)最好測試點(diǎn)擊一下,是不是原來的ifame部分已經(jīng)不能點(diǎn)擊,而且拖拽起來已經(jīng)不再卡頓了

/* 添加透明遮罩層 */ .iframeDiv { width: 100%; height: 100%; position: absolute; z-index: 1111; filter: alpha(opacity=0); opacity: 0; background: transparent; margin-top: 30px; /*display: none;*/ }

實(shí)現(xiàn)遮罩層在拖拽時(shí)出現(xiàn)

我的解決辦法是直接在拖拽區(qū)域添加監(jiān)聽鼠標(biāo)的按下和松開事件,按下后遮罩層出現(xiàn),松開后消失,因此修改resize部分,添加onmouseup&mousedown,分別傳入?yún)?shù),用于修改iframeDiv的css樣式中的display屬性值

<div ref='resize' @mousedown='changeIframeDivStyle(’’)' @onmouseup='changeIframeDivStyle(’none’)' >⋮ </div>

然后添加changeIframeDivStyle方法,因?yàn)間etElementByClassName返回的是個(gè)數(shù)組集合,但是我又確認(rèn)自己頁面只有一個(gè)iframeDiv,所以選擇了iframe[0],如果想使用getElementById也可以

changeIframeDivStyle(display) { var iframeDiv = document.getElementsByClassName(’iframeDiv’); iframeDiv[0].style.display = display; },

到此基本就算完成大半了,mousedown為鼠標(biāo)按下事件,按下后設(shè)置display為空,即遮罩層出現(xiàn),onmouseup為鼠標(biāo)松開事件,松開后遮罩層消失,達(dá)到不影響用戶操作查看iframe中內(nèi)容的目的

頁面初始化時(shí)遮罩層設(shè)置問題

按照實(shí)際來講,初始化進(jìn)入頁面時(shí),我們就不應(yīng)該留有遮罩層,所以按照我的想法來講,就是直接在css中修改樣式,但是如上所見,我把它注釋掉了,至于為什么,先賣個(gè)關(guān)子,大家修改后嘗試一下,看看拖拽時(shí)卡頓不卡頓

display: none;

在我本以為這樣就可以解決問題時(shí),我發(fā)現(xiàn),首次進(jìn)入頁面,直接進(jìn)行拖拽,依舊會(huì)存在卡頓,但是拖拽過一次之后,就不會(huì)再有問題了。這個(gè)問題,,我又不知道為什么了,于是,既然它需要拖拽一次之后才不會(huì)卡頓,那我就直接注釋掉了css中這個(gè)display樣式,反而在 mounted中添加方法,這樣反而成功了,雖然搞不明白兩者的差距,但是問題總算是解決了,如果有知道原因的朋友,可以在評(píng)論中分享出來,供大家學(xué)習(xí)學(xué)習(xí)。

this.changeIframeDivStyle(’none’);

解決方式

在iframe上添加透明遮罩層樣式

<div ref='box'> <div ref='left'> </div> <div ref='resize'> ⋮ </div> <div ref='mid'> <!--在此處添加遮罩層--> <div class='iframeDiv'></div> <iframe name='iFrame1' frameborder='0' scrolling='auto' :src='http://www.hdgsjgj.cn/bcjs/iframeUrl'> </iframe> </div> </div>

添加CSS樣式

.iframeDiv { width: 100%; height: 100%; position: absolute; z-index: 1111; filter: alpha(opacity=0); opacity: 0; background: transparent; margin-top: 30px; /*display: none;*/ }

添加鼠標(biāo)的監(jiān)聽事件

在拖拽區(qū)添加鼠標(biāo)的按下事件和松開事件

<div ref='resize' @mousedown='changeIframeDivStyle(’’)' @onmouseup='changeIframeDivStyle(’none’)' >⋮ </div>

添加方法

changeIframeDivStyle(display) { var iframeDiv = document.getElementsByClassName(’iframeDiv’); iframeDiv[0].style.display = display; },

設(shè)置頁面初始化加載

this.changeIframeDivStyle(’none’);

到此這篇關(guān)于vue中解決拖拽改變存在iframe的div大小時(shí)卡頓問題的文章就介紹到這了,更多相關(guān)vue拖拽div卡頓內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Vue
相關(guān)文章:
主站蜘蛛池模板: lcd条形屏-液晶长条屏-户外广告屏-条形智能显示屏-深圳市条形智能电子有限公司 | 数字展示在线_数字展示行业门户网站 | 焊管生产线_焊管机组_轧辊模具_焊管设备_焊管设备厂家_石家庄翔昱机械 | ALC墙板_ALC轻质隔墙板_隔音防火墙板_轻质隔墙材料-湖北博悦佳 | 求是网 - 思想建党 理论强党 | 南京试剂|化学试剂|分析试剂|实验试剂|cas号查询-专业60年试剂销售企业 | 海日牌清洗剂-打造带电清洗剂、工业清洗剂等清洗剂国内一线品牌 海外整合营销-独立站营销-社交媒体运营_广州甲壳虫跨境网络服务 | 点焊机-缝焊机-闪光对焊机-电阻焊设备生产厂家-上海骏腾发智能设备有限公司 | 大巴租车平台承接包车,通勤班车,巴士租赁业务 - 鸿鸣巴士 | 健康管理师报名入口,2025年健康管理师考试时间信息网-网站首页 塑料造粒机「厂家直销」-莱州鑫瑞迪机械有限公司 | 杭州厂房降温,车间降温设备,车间通风降温,厂房降温方案,杭州嘉友实业爽风品牌 | 【铜排折弯机,钢丝折弯成型机,汽车发泡钢丝折弯机,线材折弯机厂家,线材成型机,铁线折弯机】贝朗折弯机厂家_东莞市贝朗自动化设备有限公司 | 水质传感器_水质监测站_雨量监测站_水文监测站-山东水境传感科技有限公司 | 瑞典Blueair空气净化器租赁服务中心-专注新装修办公室除醛去异味服务! | 广州监控安装公司_远程监控_安防弱电工程_无线wifi覆盖_泉威安防科技 | 钢化玻璃膜|手机钢化膜|钢化膜厂家|手机保护膜-【东莞市大象电子科技有限公司】 | 高压绝缘垫-红色配电房绝缘垫-绿色高压绝缘地毯-上海苏海电气 | 浩方智通 - 防关联浏览器 - 跨境电商浏览器 - 云雀浏览器 | 网站seo优化_seo云优化_搜索引擎seo_启新网络服务中心 | 首页-恒温恒湿试验箱_恒温恒湿箱_高低温试验箱_高低温交变湿热试验箱_苏州正合 | 万濠影像仪(万濠投影仪)百科-苏州林泽仪器| 北京晚会活动策划|北京节目录制后期剪辑|北京演播厅出租租赁-北京龙视星光文化传媒有限公司 | 不锈钢/气体/液体玻璃转子流量计(防腐,选型,规格)-常州天晟热工仪表有限公司【官网】 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 北京开业庆典策划-年会活动策划公司-舞龙舞狮团大鼓表演-北京盛乾龙狮鼓乐礼仪庆典策划公司 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 石家庄救护车出租_重症转院_跨省跨境医疗转送_活动赛事医疗保障_康复出院_放弃治疗_腾康26年医疗护送转诊团队 | 净气型药品柜-试剂柜-无管道净气型通风柜-苏州毕恩思 | 一氧化氮泄露报警器,二甲苯浓度超标报警器-郑州汇瑞埔电子技术有限公司 | 磁棒电感生产厂家-电感器厂家-电感定制-贴片功率电感供应商-棒形电感生产厂家-苏州谷景电子有限公司 | nalgene洗瓶,nalgene量筒,nalgene窄口瓶,nalgene放水口大瓶,浙江省nalgene代理-杭州雷琪实验器材有限公司 | 成都亚克力制品,PVC板,双色板雕刻加工,亚克力门牌,亚克力标牌,水晶字雕刻制作-零贰捌广告 | 工控机-工业平板电脑-研华工控机-研越无风扇嵌入式box工控机 | 欧洲MV日韩MV国产_人妻无码一区二区三区免费_少妇被 到高潮喷出白浆av_精品少妇自慰到喷水AV网站 | 旅游规划_旅游策划_乡村旅游规划_景区规划设计_旅游规划设计公司-北京绿道联合旅游规划设计有限公司 | 凝胶成像系统(wb成像系统)百科-上海嘉鹏 | 荣事达手推洗地机_洗地机厂家_驾驶式扫地机_工业清洁设备 | 行吊_电动单梁起重机_双梁起重机_合肥起重机_厂家_合肥市神雕起重机械有限公司 | POS机办理_个人pos机免费领取-银联pos机申请首页 | 字典-新华字典-在线字典查字-字典趣| 东莞螺丝|东莞螺丝厂|东莞不锈钢螺丝|东莞组合螺丝|东莞精密螺丝厂家-东莞利浩五金专业紧固件厂家 |