国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

前端Vue3+TS實現(xiàn)視頻放大縮小,放大后實現(xiàn)視頻的拖動+拖動邊框限制

這篇具有很好參考價值的文章主要介紹了前端Vue3+TS實現(xiàn)視頻放大縮小,放大后實現(xiàn)視頻的拖動+拖動邊框限制。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

最近實現(xiàn)了一個新的需求,大體內(nèi)容是要對所播放的視頻做一個放大縮小的處理,同時在視頻放大的同時要實現(xiàn)視頻的一個拖拽,拖拽的同時,要對視頻拖動的范圍作出一個限制,下面來看看我的一個實現(xiàn)的思路。

技術(shù)棧:Vue3.2 + TS文章來源地址http://www.zghlxwxcb.cn/news/detail-823735.html

1.放大縮小采用的形式是什么?
/1.肯定不能單純的采用px放大,這樣會出現(xiàn)視頻放大的時候位置發(fā)生變動
/2.采用scale放大,這樣每次放大都是視頻的中心點
2.拖動實現(xiàn)
/1.當鼠標按下和視頻已經(jīng)放大之后,才允許用戶拖動
/2.同時需要對視頻拖動的范圍作出限制
/3.按鈕抬起的時候,需要把拖動取消掉,同時拖動限制離開范圍也需要把按鈕給取消掉
3.實現(xiàn)
//頁面結(jié)構(gòu)
//給外層div綁定mouseleave,給視頻綁定鼠標抬起,按下,移動相關(guān)事件,同時視頻放大之后,綁定動態(tài)的class
<div class="videoBox" @mouseleave="endDrag">
   <video
     ref="videoRef"
     id="customVideo"
     class="video-js vjs-big-play-centered"
     @mouseup="endDrag" 
     @mousedown="dragging" 
     @mousemove="handleDrag"
     :class="{'videoPoint': scale > 1}" 
     :style="{ width: '100%', height: '100%' }">
    </video>
</div>
//點擊事件
//點擊事件綁定一個就可以,同時傳遞不同的參數(shù),來進行控制
<a-tooltip content="放大">
  <a-button :style="{ color: 'red' }" @click="scaleUp(1)">
    放大
  </a-button>
</a-tooltip>
<a-tooltip content="縮小">
  <a-button :style="{ color: 'red' }" @click="scaleUp(-1)">
    縮小
  </a-button>
</a-tooltip>
<a-tooltip content="還原">
  <a-button :style="{ color: 'red' }" @click="scaleUp(0)">
    還原
  </a-button>
</a-tooltip>
//業(yè)務(wù)邏輯實現(xiàn)
// 1.視頻放大縮小邏輯實現(xiàn)
// 視頻放大,縮小,還原
const scale = ref(1) //控制視頻放大縮小倍數(shù)
const videoRef = ref(null)//定義ref,拿到video標簽相關(guān)的屬性
const scaleUp = (flag) => {
  // 根據(jù)flag的值,對視頻進行放大縮小和還原的處理
  switch (flag) {
    case 1:
      if (scale.value.toFixed(2) >= 2.5) {//js的精度誤差,所以加了一個toFixed保留兩位小數(shù)
        return
      }
      scale.value += 0.1
      videoRef.value.style.transform = `scale(${scale.value})`;
      break;
    case -1:
      if (scale.value.toFixed(2) <= 0.1) {
        return
      }
      scale.value -= 0.1
      videoRef.value.style.transform = `scale(${scale.value})`;
      break;
    default:
      resetPosition()
  }
}
//還原:還原他的縮放倍數(shù),還原拖動位置
const resetPosition = () => {
  videoRef.value.style.transform = `scale(1)`;
  scale.value = 1
  videoPosition.x = 0;
  videoPosition.y = 0;
  videoRef.value.style.left = '0px';
  videoRef.value.style.top = '0px';
}
2.視頻拖動
這一塊是比較困難的,需要把詳細的思路理清楚
//定義鼠標的起始點擊位置
const dragStartX = ref(0)
const dragStartY = ref(0)
//控制鼠標是否按下
const isClick = ref(false)
//控制視頻位置的變化
const videoPosition = reactive({
  x:0,
  y:0
})
// 判斷是否可以拖動 滿足放大和按下,才可拖動,使用計算屬性控制
const isDragging = computed(() => {
  return scale.value > 1 && isClick.value ? true :false
});
//鼠標按下
const dragging = (e) => {
  isClick.value = true
  dragStartX.value = e.clientX - videoPosition.x;
  dragStartY.value = e.clientY - videoPosition.y;
  window.addEventListener('mouseup', endDrag);
}
let containerRect = null
const handleDrag = (e) => {
  if (isClick.value) {
    const {w,h} = getVideoSize()
    videoPosition.x = e.clientX - dragStartX.value;
    videoPosition.y = e.clientY - dragStartY.value;
    // 限制取極值
    videoPosition.x = Math.min(Math.max(-w, videoPosition.x), w);
    videoPosition.y = Math.min(Math.max(-h, videoPosition.y), h);
  }
  // 滿足點擊和放大,才進行拖動
  if (isDragging.value) {
    videoRef.value.style.left = `${videoPosition.x}px`;
    videoRef.value.style.top = `${videoPosition.y}px`;
  }
}

const getVideoSize = () => {
  containerRect = videoRef.value.getBoundingClientRect()
  const { width, height } = containerRect
  const w = width / 3
  const h = height  / 2
  console.log(width);
  return {w,h}
}

//取消拖動
const endDrag = () => {
  isClick.value = false
  window.removeEventListener('mouseup', endDrag);
};

到了這里,關(guān)于前端Vue3+TS實現(xiàn)視頻放大縮小,放大后實現(xiàn)視頻的拖動+拖動邊框限制的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • vue3 圖片放大縮小、拖拽功能(自定義指令)

    vue3 圖片放大縮小、拖拽功能(自定義指令)

    效果 自定義 拖拽指令 vDrag.js 參考來源 https://github.com/sunzsh 使用 自定義 拖拽指令 寫法二 (帶傳參及回調(diào)寫法) vDrag.js 使用 自定義 縮放指令 vWheelScale.js 根據(jù)項目需要 我指令加了 動態(tài)參數(shù) 及 回調(diào)函數(shù) 不需要自行修改 使用 自定義 縮放指令 寫法二(帶傳參及回調(diào)寫法)

    2024年02月01日
    瀏覽(103)
  • element ui dialog可拉伸放大縮小和拖動

    element ui dialog可拉伸放大縮小和拖動

    鼠標放到對話框頭部可以拖動對話框、雙擊頭部可以放大對話框 鼠標放到對話框左右兩側(cè)可以拖動對話框?qū)挾?、放到下邊可以拖動對話框高度、放到右下角高度寬度可以同時縮放 或者單獨寫一個js將Vue.directive(\\\'dialogDrag\\\', { ………… } )中的代碼放入其中如: ? ? 這樣就可以,

    2024年02月15日
    瀏覽(18)
  • uniapp圖片放大縮小預覽,并支持圖片拖動附效果圖

    uniapp圖片放大縮小預覽,并支持圖片拖動附效果圖

    效果圖: 放大縮小和拖動是根據(jù)?movable-area 組件來實現(xiàn)的,小程序和uniapp都支持這個組件。 movable-area | 微信開放文檔 微信開發(fā)者平臺文檔 https://developers.weixin.qq.com/miniprogram/dev/component/movable-area.html 實現(xiàn)思路: 默認顯示默認大小的圖片,點擊圖片執(zhí)行yulan事件從而顯示放大縮

    2024年02月11日
    瀏覽(120)
  • 【[Qt]基于QGraphicsView的圖像顯示控件,支持放大、縮小、鼠標拖動】

    【[Qt]基于QGraphicsView的圖像顯示控件,支持放大、縮小、鼠標拖動】

    ImageViewer.h文件 ImageViewer.cpp 文件 具體使用代碼如下 1、初始化類對象,并加入界面布局中 2、打開圖像,并加載到控件中 3、從控件中卸載圖片 源碼鏈接:https://download.csdn.net/download/xiaohuihuihuige/87239431 百度云: 鏈接:https://pan.baidu.com/s/1W-KUlIKUFAktUKFin63N0g 提取碼:4g8a

    2024年02月11日
    瀏覽(102)
  • Unity打包窗口化放大、縮小、拖拽功能、無邊框設(shè)置 C#

    Unity打包窗口化放大、縮小、拖拽功能、無邊框設(shè)置 C#

    Unity無邊框設(shè)置、窗口化放大、縮小、拖拽 提示:PC端打包,測試盡量在打包后測試。 編輯器下測試會有意想不到的后果呦~~ [DllImport(\\\"user32.dll\\\")] 。 代碼如下: 代碼如下:注釋詳細,不懂就問哈 代碼整體已貼出,功能親測可用,歡迎學習交流。點贊+收藏+關(guān)注哦~

    2024年02月16日
    瀏覽(25)
  • 【vue3】js + css 實現(xiàn) 視頻框選放大:局部細節(jié)放大、放大鏡效果

    【vue3】js + css 實現(xiàn) 視頻框選放大:局部細節(jié)放大、放大鏡效果

    實現(xiàn)鼠標框選區(qū)域放大顯示。 需求1:放大 按住鼠標左鍵不放 ——》向右側(cè)拖動,框選出需要放大的區(qū)域后 ——》松開鼠標 ——》框選區(qū)域放大顯示 需求2:還原 按住鼠標左鍵不放 ——》向左側(cè)拖動,框選出隨意大小的區(qū)域后 ——》松開鼠標 ——》視圖顯示大小還原 需求

    2024年02月03日
    瀏覽(29)
  • Vue 實現(xiàn)圖片監(jiān)聽鼠標滑輪滾動實現(xiàn)圖片縮小放大功能

    Vue 實現(xiàn)圖片監(jiān)聽鼠標滑輪滾動實現(xiàn)圖片縮小放大功能

    前言 其實想要實現(xiàn)功能很簡單,就是在一張圖片上監(jiān)聽鼠標滑輪滾動的事件,然后根據(jù)上滾還是下滾實現(xiàn)圖片的縮放。 效果: 注:該配圖使用《漫畫|有趣的了解一下賦值、深淺拷貝》文章圖片,不存在侵權(quán)問題。 實現(xiàn)思路 在js中,onmousewheel是鼠標滑輪滾動事件,可以通過

    2024年02月01日
    瀏覽(107)
  • vue實現(xiàn) 圖片拖拽及鼠標滾輪放大縮小

    vue實現(xiàn) 圖片拖拽及鼠標滾輪放大縮小

    效果: 代碼實現(xiàn)

    2024年02月14日
    瀏覽(96)
  • 使用ExcelJS實現(xiàn)excel的前端導出功能(Vue3+TS)

    ExcelJS :讀取,操作并寫入電子表格數(shù)據(jù)和樣式到 XLSX 和 JSON 文件。一個 Excel 電子表格文件逆向工程項目。 github中文文檔:https://github.com/exceljs/exceljs/blob/master/README_zh.md ?封裝excel.ts工具文件 表格頁面調(diào)用excel工具文件?

    2024年02月14日
    瀏覽(29)
  • 前端開發(fā)小技巧 - 【Vue3 + TS】 - 在 TS + Vue3 中使用 Pinia,實現(xiàn) Pinia 的持久化,優(yōu)化Pinia(倉庫統(tǒng)一管理)

    前端開發(fā)小技巧 - 【Vue3 + TS】 - 在 TS + Vue3 中使用 Pinia,實現(xiàn) Pinia 的持久化,優(yōu)化Pinia(倉庫統(tǒng)一管理)

    ts 中使用 pinia 和 Vue3 基本一致,唯一的不同點在于,需要根據(jù)接口文檔給 state 標注類型,也要給 actions 標注類型; 以下都是 組合式API 的寫法, 選項式API 的寫法大家可以去官網(wǎng)看看; Pinia; 持久化插件 - pinia-plugin-persistedstate; 目標文件: src/types/user.d.ts (這里以 user.d.t

    2024年04月09日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包