分享屏幕坐标和窗口通信

简介

实现功能,通过url传参选择扑克牌,桌面同时打开两个以上该窗口,扑克牌可以在窗口之间移动。

579c5a6374e641cfada67bf12e0ef3d0.png

在线演示

屏幕坐标和窗口通信

实现代码

<!DOCTYPE html><html><head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta content="always" name="referrer"><meta name="theme-color" content="#ffffff">
<meta name="description" content="">
<title>屏幕坐标和窗口通信</title>
<style>
.card{position: absolute;width: 156px;height: 194px;background-image: url(./imgs/card.jpg);background-repeat: no-repeat;background-position: -1px -194px;border-radius: 13px;box-shadow: 8px 10px 10px 1px rgba(0,0,0,0.5);
}
</style>
</head><body><div><img draggable="false" class="card" />
</div><script>
//扑克(英文:Poker),代指两种含义:
//一是指纸牌(playing cards);
//二是指以用纸牌来玩的游戏,称为扑克游戏,如德州扑克。
//一副扑克牌有54张牌,其中52张是正牌,另2张是副牌(大王和小王)。
//52张正牌又均分为13张一组,并以黑桃、红桃、梅花、方块四种花色表示各组,
//每组花色的牌包括从1-10(1通常表示为A)以及J、Q、K标示的13张牌,玩法千变万化,多种玩法。
const card = document.querySelector('.card')
const channel = new BroadcastChannel('card')
//每种花色刚好13张,指每个季节有13个星期。
const cardenum = {A: 0,2: 1,3: 2,4: 3,5: 4,6: 5,7: 6,8: 7,9: 8,10: 9,J: 10,Q: 11,K: 12
}
//扑克牌中的四种花色,即:黑桃(spade)、红桃(heart)、梅花(club)、方块(diamond)、代表一年中的春夏秋冬四季,
//黑桃、梅花代表夜晚,红桃、方块代表白天。
//除大王(red Joker)、小王( black Joker)外,扑克牌一共52张,指一年有52个星期。其中J、Q和K共12张,代表一年有12个月。
//而扑克牌里的——A指“至尊(Ace)”
//K指“国王(King)”
//Q指“王后(Queen)”
//J指的是“宫内的仆人杰克(Jack)”
const colorenum = {clubs:0,//梅花diamonds:1,//方块spades:2,//黑桃hearts:3,//红心joker:4//副牌 大王 小王
}
channel.onmessage=(e)=>{const clientPoints = screenToClient(...e.data)card.style.left = clientPoints[0]+'px'card.style.top = clientPoints[1]+'px'
}
card.onmousedown=(e)=>{let x = e.pageX -card.offsetLeft;let y = e.pageY -card.offsetTop;window.onmousemove=(e)=>{const cx=e.pageX-xconst cy=e.pageY-ycard.style.left=cx+'px'card.style.top=cy+'px'const screenPoints=clientToScreen(cx,cy)channel.postMessage(screenPoints)}window.onmouseup=()=>{window.onmousemove=nullwindow.onmouseup=null}
}function barHeight(){return window.outerHeight - window.innerHeight
}function clientToScreen(x,y){const screenX = x+window.screenXconst screenY = y+window.screenY+barHeight()return [screenX,screenY]
}function screenToClient(x,y){const clientX=x-window.screenXconst clientY=y-window.screenY-barHeight()return [clientX,clientY]
}function init(){//?type=Aconst url = new URL(location.href)const type = url.searchParams.get('type')||'A'//A 2 3 4 5 6 7 8 9 10 J Q Kconst color = url.searchParams.get('color')||'clubs'// clubs diamonds spades hearts//console.log(cardenum[type], colorenum[color],-1+cardenum[type]*156,-194*colorenum[color])card.style.backgroundPosition = `${-1-156*cardenum[type]}px ${-194*colorenum[color]}px`//card.src = `./${type}.jpg`
}init()</script></body></html>

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/38440.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为od-C卷200分题目5 -项目排期

华为od-C卷200分题目5 -项目排期 题目描述 项目组共有N个开发人员&#xff0c;项目经理接到了M个独立的需求&#xff0c;每个需求的工作量不同&#xff0c;且每个需求只能由一个开发人员独立完成&#xff0c;不能多人合作。 假定各个需求之间无任何先后依赖关系&#xff0c;请…

使用DDR的MIG IP核,如何提高DDR的读写效率

要提高DDR MIG&#xff08;Memory Interface Generator&#xff09;的读写效率&#xff0c;有几种策略和技巧可以考虑&#xff1a; burst传输优化&#xff1a; 尽可能使用最大的burst长度。DDR3/DDR4通常支持8beat或8n beat的burst。更长的burst可以提高数据传输效率&#xff0…

IDLE-python windows官方安装包下载国内镜像下载地址汇总

此为IDLE-windows安装包,exe格式只能在windows x64系统下面使用 序号版本名称下载地址1IDLE-python-3.12.4-amd64.exe点我下载2IDLE-python-3.11.9-amd64.exe点我下载3IDLE-python-3.10.11-amd64.exe点我下载4IDLE-python-3.9.13-amd64.exe点我下载5IDLE-python-3.8.10-amd64.…

html--橙色火箭404维护

<!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>系统维护通知</title><link rel"stylesheet" type"text/css" href"css/notice.css"/> </head> <body><div cla…

代码随想录——柠檬水找零(Leetcode860)

题目链接 贪心 class Solution {public boolean lemonadeChange(int[] bills) {if(bills[0] 10 || bills[0] 20 || bills[1] 20){return false;}int count5 1;int count10 0;for(int i 1; i < bills.length; i){if(bills[i] 5){count5;}if(bills[i] 10){count10;…

解决Java中的ParseException异常的实用方法

解决Java中的ParseException异常的实用方法 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 了解ParseException异常 ParseException是Java中常见的异常之一&…

重温react-11(userMemo和useContext的使用方式)

userMemo import React, { useState, useMemo } from reactexport default function LearnFunction08() {const [num1] useState(0);const [num2, setNum2] useState(0);const [num3, setNum3] useState(0);const number useMemo(() > {console.log(调用了吗);return n…

51单片机第16步_点灯

本章重点学习软件延时和普通IO口输出。 1、delay.c如下&#xff1a; #include <intrins.h> //包含头文件intrins.h,要放在stdio.h的头文件之前; //使能函数如下: //1 _nop_(); 相当于汇编的NOP指令; //2 bit _testbit_( bit bit_value ); 对bit_value进行测试,若b…

ZooKeeper 入门:初学者指南

在分布式系统领域&#xff0c;协调和同步至关重要。Apache ZooKeeper 是一种分布式协调服务&#xff0c;是帮助管理和同步分布式环境中服务的基本组件。本指南旨在深入分析 ZooKeeper、其架构及其在现代分布式系统中的作用。我们还将探索一个示例来展示其实际影响。 ZooKeeper…

Geeker-Admin:现代化的开源后台管理框架

Geeker-Admin&#xff1a;优雅管理&#xff0c;高效开发&#xff0c;尽在Geeker-Admin- 精选真开源&#xff0c;释放新价值。 概览 Geeker-Admin是一个基于Vue 3.4、TypeScript、Vite 5、Pinia和Element-Plus构建的开源后台管理框架。它为开发者提供了一套现代化、响应式的管理…

vue3的配置和使用

vue的使用需要配置node且node版本需要在15以上。管理员方式打开cmd&#xff0c;输入node -v&#xff0c;可以查看node版本。 创建vue有以下两种方式 npm init vuelatestnpm create vuelatest创建后输入项目名&#xff0c;其它的输入否即可&#xff0c;新手可以先不用 按照要求…

【信息系统项目管理师知识点速记】组织通用治理:转型升级

22.3转型升级 当组织面临社会经济发展环境不断变化、社会竞争日趋激烈、客户和服务对象需求日益个性化、发展空间和发展动能被不断挤压等挑战时,积极主动开展深层次的转型升级是组织可持续发展的关键,适时地进行组织优化调整升级是组织谋求健康发展的迫切要求和必然路径。 …

WebKit 简介及工作流程深度解析

WebKit 是一个开源的浏览器引擎&#xff0c;最初由苹果公司为 Safari 浏览器开发&#xff0c;后来被多个浏览器和应用采纳&#xff0c;如早期的 Chrome 和众多移动平台上的浏览器。WebKit 不仅仅是一个渲染引擎&#xff0c;它集成了 HTML、CSS、JavaScript 的解析与渲染能力&am…

代理ip的种类及区别

HTTP 代理ip HTTP 代理ip是最常见的代理ip类型&#xff0c;它们使用与大多数网站非常兼容的 HTTP 协议。HTTP 代理ip在很大程度上已被淘汰&#xff0c;因为 HTTP 发送的数据未加密。这使得黑客或怀有恶意的用户很容易窃取您的所有数据。 即使有很大的缺点&#xff0c;您仍然可…

安全与加密常识(4)证书签名请求(CSR)

文章目录 什么是CSRCSR的作用如何生成CSR什么是CSR 证书签名请求(Certificate Signing Request,简称CSR)是一个由申请证书的实体(如公司或个人)生成的文件,其中包含申请者的公钥和身份信息(如组织名称、通用名、地点等)。CSR主要用于在数字证书认证过程中向证书颁发机…

解决git无法管理idea后端项目文件

看看后端项目中有没有.iml后缀的文件&#xff0c;把它删掉&#xff0c;然后重新加载maven

【01最短路 BFS】1368. 使网格图至少有一条有效路径的最小代价

如果有不明白的&#xff0c;请加文末QQ群。 本文涉及知识点 01最短路 CBFS算法 图论知识汇总 LeetCode 1368. 使网格图至少有一条有效路径的最小代价 给你一个 m x n 的网格图 grid 。 grid 中每个格子都有一个数字&#xff0c;对应着从该格子出发下一步走的方向。 grid[i]…

【redis】redis分片集群基础知识

1、基本概念 1.1定义 分片&#xff1a;数据按照某种规则&#xff08;比如哈希&#xff09;被分割成多个片段&#xff08;或分片&#xff09;&#xff0c;每个片段被称为一个槽&#xff08;slot&#xff09;。槽是Redis分片集群中数据的基本单元。节点&#xff1a;Redis分片集…

DRAM vs. SRAM:了解动静态随机存取存储器的区别

在计算机领域&#xff0c;DRAM&#xff08;动态随机存取存储器&#xff09;和SRAM&#xff08;静态随机存取存储器&#xff09;是两种重要的存储器类型。它们在结构、工作原理、性能和应用上都有显著的不同。本文将详细介绍这两种存储器&#xff0c;帮助基础小白理解它们的区别…

LLama-Factory使用教程

本文是github项目llama-factory的使用教程 注意&#xff0c;最新的llama-factory的github中训练模型中&#xff0c;涉及到本文中的操作全部使用了.yaml配置。 新的.yaml的方式很简洁但不太直观&#xff0c;本质上是一样的。新的readme中的.yaml文件等于下文中的bash指令 PS: …