栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

js 根据鼠标拖动(或手机长按)旋转

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

js 根据鼠标拖动(或手机长按)旋转

因为没有搜索到,所以 自己写了一个

废话不多说,直接上效果图


旋转效果.gif

废话不多说,直接上代码,顺便给个数学的公式图

.png

将公式变化为js代码

            //得到 向量1
            var x1 = (beginPointX - bgCenterX);            var y1 = (beginPointY - bgCenterY);            //得到 向量2
            var x2 = (event.center.x - bgCenterX);            var y2 = (event.center.y - bgCenterY);            //计算cos =(x1x2+y1y2)/[√(x1²+y1²)*√(x2²+y2²)]
            var cos =( x1 * x2 + y1 * y2) /( Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)) * Math.sqrt(Math.pow(x2, 2) + Math.pow(y2, 2)) );            // 弧度
            var radina = Math.acos(cos);            // 角度
            var angle =  180 / (Math.PI / radina);

控件的需求是根据鼠标拖来旋转,所以用到了Vue-touch 控件的 pan 事件,然后控件的大小固定宽高300px, 完整的控制代码

  panmove:function(event){            //得到 向量1
            var x1 = (beginPointX - bgCenterX);            var y1 = (beginPointY - bgCenterY);            //得到 向量2
            var x2 = (event.center.x - bgCenterX);            var y2 = (event.center.y - bgCenterY);            //计算cos =(x1x2+y1y2)/[√(x1²+y1²)*√(x2²+y2²)]
            var cos =( x1 * x2 + y1 * y2) /( Math.sqrt(Math.pow(x1, 2) + Math.pow(y1, 2)) * Math.sqrt(Math.pow(x2, 2) + Math.pow(y2, 2)) );            
            var radina = Math.acos(cos);            console.log(radina);            // 角度
            var angle =  180 / (Math.PI / radina);            //如果在中线左边 就需要加 180度
            if(event.center.x <150){
                angle = 180 + (180 - angle);
            }            this.styleObject.transform =  'rotate(' + angle + 'deg)';            
        },



作者:猫爪
链接:https://www.jianshu.com/p/2b1d0b5fae88


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/246764.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号