Miniaplicativo WeChat com efeito deslizante do painel de controle

 Requisito: Faça o botão do triângulo girar ao redor do círculo ao deslizar;

Encontrei um semelhante na Internet que só tem uma exibição de gráfico e não pode ser passado manualmente.

O processo de pensamento é o seguinte:

1. Para obter o efeito de rotação

O botão pode ser girado alterando o ângulo de rotação

transform:rotate(0deg);
transition:all .1s;

 2. Obtenha o ângulo de rotação

Primeiro, desenhamos um eixo de coordenadas xy no gráfico. Quando o botão está no primeiro quadrante, o ângulo em que o botão gira é o ângulo entre os lados de bc.

O comprimento do lado a é: o valor x da posição de toque na tela menos a distância do nó até o lado esquerdo da tela e depois menos metade da largura do nó;

O comprimento do lado b é: o valor y da posição de toque na tela menos a distância do nó até o lado superior da tela e depois menos metade da altura do nó para obter o valor absoluto;

Depois de ter os comprimentos de a e b, use o teorema de Pitágoras para calcular o comprimento de c;

Depois de usar a / c, use o método Math.asin para obter o valor do arco seno e, em seguida, * 180/Math.PI;

O valor obtido é o ângulo incluído do lado bc;

Se o botão estiver no quarto quadrante,

 Neste momento, os métodos de cálculo do lado a e do lado b são trocados, os outros são os mesmos de quando estão no primeiro quadrante, e o ângulo final é somado 90 graus;

O método de cálculo do terceiro quadrante é o mesmo do primeiro quadrante, e o ângulo final é somado em 180 graus;

O segundo quadrante é calculado da mesma forma que o quarto quadrante, e o ângulo final é somado com 270 graus;

Desta forma, obtemos o ângulo de deslizamento para qualquer posição.

Código:

 Não vou postar os códigos html e css aqui, você pode implementá-los de acordo com seu próprio estilo de interface.

Primeiro, obtenha os atributos do nó externo inferior em onload e calcule a posição do ponto central;

//由于小程序中不支持ref所以使用这种方式;
uni.createSelectorQuery().select('.inner').boundingClientRect(
	(rect) => {
		this.rect = rect;
		this.rect.width_c = this.rect.width / 2;
		this.rect.height_c = this.rect.height / 2;
		console.log(this.rect);
	}
).exec();

Em seguida, ouça touchmove no nó externo

<view class="inner" @touchmove="move">

O conteúdo do movimento é o seguinte:

/* 
触摸位置的值减去节点距离屏幕边缘的位置 就得到了触摸点在节点中所在的位置;
注意这里的值并不是坐标轴里面的xy值,而是从节点的左上角向右向下延伸的值;
*/
let left = e.touches[0].pageX - this.rect.left;
let top = e.touches[0].pageY - this.rect.top;

// 这里根据中心点的位置判断下,触摸点所在的象限;
let now_index = 0;
if (left < this.rect.width_c) {
	if (top < this.rect.height_c) {
		now_index = 3
	} else {
		now_index = 2;
	}
} else {
	if (top < this.rect.height_c) {
		now_index = 0;
	} else {
		now_index = 1;
	}
}

// 触摸点在节点中所在的位置减去节点宽高的一半之后取绝对值,这样就确定了坐标轴中xy的值了。然后根据勾股定理计算出斜边的值;
let x = Math.abs(left - this.rect.width_c);
let y = Math.abs(top - this.rect.height_c);
let z = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2));


// 根据触摸点所在的象限判断 是取哪条边的值除以斜边之后取反正弦值
let asin = 0;
if (now_index == 0 || now_index == 2) {
	asin = Math.asin(x / z);
} else {
	asin = Math.asin(y / z);
}
// 计算出反正弦值后 * 180 / Math.PI后就得出了角度,再加上之前象限的角度就得到了所要旋转的角度了,之后赋值给html中的样式就可以了
let angle = Number((asin * 180 / Math.PI).toFixed(2)) + (now_index * 90);

Os requisitos escritos aqui são basicamente realizados.

Originalidade não é fácil, espero que você deixe muitos comentários e curtidas.

Efeito deslizante do painel - efeito deslizante do painel ao vivo CSDN uni-app WeChat applet https://live.csdn.net/v/182330

Acho que você gosta

Origin blog.csdn.net/qq_18676843/article/details/121860659
Recomendado
Clasificación